C++需要标头中类声明的帮助

C++ Need Help for Class Declaration in Header

本文关键字:声明 帮助 C++      更新时间:2023-10-16

>我在尝试理解以下代码时陷入困境。

class V8_EXPORT Utf8Value {
public:
explicit Utf8Value(Local<v8::Value> obj);
~Utf8Value();
char* operator*() { return str_; }
const char* operator*() const { return str_; }
int length() const { return length_; }
private:
char* str_;
int length_;
Utf8Value(const Utf8Value&);
void operator=(const Utf8Value&);
};
  1. 行: "~utf8Value();" 当我检查 cpp 文件时,它只包含一行:

    String::Utf8Value::~Utf8Value() {
    i::DeleteArray(str_);
    }
    

这是否意味着该功能是删除char* str_?有什么原因为什么在函数名称之前有一个~?我可以将其重命名为其他名称而不是~Utf8Value吗?

  1. 行:const char* operator*() const { return str_; }它有什么作用?为什么函数名称后有一个*? 我对const的理解是功能/变量永远不会改变,但是括号后面的第二个const是什么意思?

  2. 行:Utf8Value(const Utf8Value&);它是另一个像第一行explicit Utf8Value(Local<v8::Value> obj);这样的构造函数吗?

  3. 行:void operator=(const Utf8Value&);我不知道这条线想做什么。

谁能帮我解决这个问题?任何帮助将不胜感激! 谢谢!!

在尝试阅读一些更大的项目源代码之前,您似乎不太了解C++语法。

对于您的问题:

  1. 类声明(范围)中以"~"开头的函数是类对象的 Destroy 函数,当对象死亡或删除时会自动调用。在这种情况下,Utf8Value 的对象(让我们在下一个称之为对象)一直持有一个指向主机销毁时需要释放的某个地方的str_。得到给予,给予得到。最后,您无法重命名它。

  2. 此行声明将此对象视为 char* 字符串时的行为。它在这里做了什么,在C++中调用运算符覆盖,大多数运算符都可以设计为您想要的,例如算术、比较、移位等。这是C++的一个非常特殊的特征。对于"const"函数,这意味着此函数不会更改此对象中的某些内容。

  3. 是的。但由于它是在私有范围内声明的,因此不能从对象或其他构造函数中调用它。一般来说,它旨在禁止以设计师不想要的方式构造对象。

  4. 它的工作方式类似于问题 3,同时尝试停止从值赋值构造对象。