string a=NULL;
它给出了错误。为什么以及如何将字符串初始化为NULL?
但是当我写
时string a="foo";
这很好。
答案 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”有效的原因。