我编写了以下代码来测试 const 成员函数: 当我有数据成员的 const 限定符时,它编译并运行良好 char *data 和构造函数的参数。但是,如果我从中删除 const 数据成员和构造函数,我得到编译器错误。 是不是因为字符串 "Hello World"总是类型 const char * ?
#include <iostream>
#include <string.h>
using namespace std;
class mystring {
const char *data;
mutable int length;
mutable int valid;
public:
mystring(const char *str) {data = str;}
~mystring() { };
int GetLength() const;
};
int mystring::GetLength() const
{
if (valid)
return length;
else {
length = strlen(data);
valid = 1;
return length;
}
}
int main()
{
const char *str = "Hello World";
mystring s(str);
cout << s.GetLength() << endl;
}
最佳答案
如果您从构造函数中删除 const
,它会告诉调用者它希望将 char*
作为参数,并且可能会更改 char
在指针的末尾。
因为您正在使用 const char*
构造 mystring,所以编译器会引发错误以帮助确保您的代码执行预期的操作。
关于c++ - 字符串文字的 const 限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5035821/