字符串在C ++中初始化为NULL

时间:2012-12-16 00:03:56

标签: c++ string null

string a=NULL;

它给出了错误。为什么以及如何将字符串初始化为NULL?

但是当我写

string a="foo";

这很好。

3 个答案:

答案 0 :(得分:11)

实际上要获得一个空的std::string,你只需要写

std::string a;

std::string的默认构造函数将为您提供一个空字符串,而无需进一步提示。

顺便说一句,通常不鼓励在C ++中使用NULL,建议使用0(无论如何都要定义NULL),或者如果你有足够现代的编译器,nullptr

答案 1 :(得分:4)

null 空字符串之间存在差异(空字符串仍然是有效字符串)。如果你想要一个“可以为空”的对象(最多可以容纳某个类型的某个对象的),你可以使用boost::optional

boost::optional<std::string> str; // str is *nothing* (i.e. there is no string)
str = "Hello, world!"; // str is "Hello, world!"
str = ""; // str is "" (i.e. empty string)

答案 2 :(得分:-2)

让我们分解一下你实际做的事情:

string a=NULL;

首先执行string a。这将在堆栈上创建一个新对象,具有默认值(空字符串)。然后执行a=NULL,它调用字符串类的赋值函数。但是什么是NULL? C ++中的NULL被宏扩展为0。因此,您正在考虑为string变量分配一个整数,这当然是不可能的。

string a="abc"

有效,因为您想要分配一个char数组,string类为char数组重载了赋值运算符方法,但不为整数赋值。这就是为什么NULL不起作用而“abc”有效的原因。