c++ - 在定义期间将 std::string 设置为 0 与将 std::string 设置为 0

标签 c++ string constructor

我正在开发一个项目,当我为一个类创建构造函数时,我将一些变量设置为默认值。我将 std::string 设置为 NULL,结果出现错误。但是,当我在同一行定义 std::string 并将其设置为 NULL 时,它可以正常工作,不会出现任何错误。我想知道为什么

第一个示例

std::string text = NULL;

工作了,并且

第二个示例

std::string text;
text = NULL;

没用。现在我知道你不应该将字符串设置为 NULL 或 0,但我偶然发现了这一点。

第一个示例是否调用一个采用 char* 的构造函数,并认为 0 是指向 char 的指针?我认为 = 也调用了构造函数,所以我不明白为什么它们不能同时工作,除非 std::string 专门重载 = 运算符。

我正在使用 Microsoft Visual Studio Express 2013

最佳答案

NULL的值计算结果为0

现在,std::string text = NULL;将调用采用const char*的构造函数并尝试复制数据,但从NULL开始没有指向任何内容,运行时会发生错误,我得到(使用 gcc 5.2):

terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_M_construct null not valid

因为,没有为 std::stringint(或 size_t)定义 operator= , text = NULL; 将无法编译。

关于c++ - 在定义期间将 std::string 设置为 0 与将 std::string 设置为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33706112/

相关文章:

C++ 值初始化自定义容器的项目

c++ - 在 C++ 中,如何避免使用泛型映射进行显式向下转换?

c++ - 指向数组访问的指针出现段错误

Python NumPy 数组数据类型

C++ 静态构造函数返回一个容器

Python Pickle 调用构造函数

c++ - 调试/跟踪嵌入式 sql

java - 在另一个字符串中查找某个字符串并计算它出现的次数

javascript - 如何替换除第一次出现以外的所有匹配字符

c++ - char 数组在构造函数中被解释为 char 指针,请帮忙