string a=NULL;
它给出了错误。为什么以及如何将字符串初始化为 NULL?
但是当我写
string a="foo";
这很好用。
实际上要得到一个空std::string
,你只需写
std::string a;
std::string
的默认构造函数将为您提供一个空字符串,而无需进一步提示。
顺便说一句,通常不鼓励在 C++ 中使用 NULL,建议要么使用 0(无论如何都倾向于定义 NULL),或者如果你有足够现代的编译器,nullptr
.
空字符串和空字符串是有区别的(空字符串仍然是有效字符串)。如果您想要一个“可为空”的对象(最多可以容纳一个特定类型的对象),您可以使用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)
让我们分解一下您实际上在做什么:
string a=NULL;
首先你执行string a
. 这将在堆栈上创建一个具有默认值(空字符串)的新对象。然后执行a=NULL
,调用字符串类的赋值函数。但什么是NULL
?NULL
在 C++ 中是宏扩展为0
. 因此,您正在尝试将整数分配给string
变量,这当然是不可能的。
string a="abc"
有效,因为您要分配一个 char 数组,并且string
该类具有为 char 数组重载的赋值运算符方法,但不适用于整数。这就是为什么NULL
不起作用而“abc”起作用的原因。