c++ - 字符串文字的 const 限定符

标签 c++ string constants

我编写了以下代码来测试 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/

相关文章:

c++ - 无法将 map 插入 vector 内?

c++ - OpenCL:循环内核?

ruby - 使用标准库仅提取 Ruby 中正则表达式的第二个匹配项

ruby - String(42) 在 Ruby 中有什么作用?

c++ - 如何使 SUBDIRS 级别定义在 qt 的子项目中可见?

c# - 查看字符串中是否存在关键字的算法

c - 字符数组的打印地址

java - char常量显示在Javadoc "Constant Field Values"页面

C++ 禁止从 const char* 设置 char* 和 char[]

c++ - 如何找到unordered_map中某个键的值?