在定义期间将std :: string设置为0,将std :: string设置为0

时间:2015-11-14 07:20:49

标签: c++ string constructor

我正在开发一个我的项目,当我为一个类创建构造函数时,我将一些变量设置为默认值。我设置了std::stringNULL,它给了我一个错误。但是,当我在同一行定义std::string并将其设置为NULL时,它可以正常运行。我想知道为什么

第一个例子

std::string text = NULL;

工作,

第二个例子

std::string text;
text = NULL;

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

第一个示例是否调用带有char*的构造函数,并认为0是指向char的指针?我认为=也称为构造函数,因此除非std::string明确重载=运算符,否则我不知道为什么它们都不起作用。

我使用的是Microsoft Visual Studio Express 2013

1 个答案:

答案 0 :(得分:3)

NULL的值评估为0

现在,std::string text = NULL;将调用构造函数取const char*并尝试复制数据,但由于NULL没有指向任何内容,因此在运行时会发生错误,I我正在(使用gcc 5.2):

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

由于operator=std::string(或int)未定义size_ttext = NULL;将无法编译。