4
string a=NULL;

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

但是当我写

string a="foo";

这很好用。

4

3 回答 3

14

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

std::string a;

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

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

于 2012-12-16T00:05:43.813 回答
4

字符串和空字符串是有区别的(空字符串仍然是有效字符串)。如果您想要一个“可为空”的对象(最多可以容纳一个特定类型的对象),您可以使用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)
于 2012-12-16T00:12:03.813 回答
-2

让我们分解一下您实际上在做什么:

string a=NULL;

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

string a="abc"

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

于 2012-12-16T00:09:07.990 回答