string str("Hello World");
string str="Hello World";
我似乎不太了解两者之间的区别。根据我的教科书,第一个语句执行的操作是“使用C字符串初始化构造函数”。那么,第一条语句是否定义了C字符串,第二条语句定义了C ++字符串?另外,请解释一下C字符串和C ++字符串之间的区别。
答案 0 :(得分:4)
这两行都创建一个名为std::string
的C ++ str
。并且都从C字符串初始化它们。区别在于它们的初始化方式:
string str("Hello World");
这将调用string(const char *)
构造函数。
第二个是copy initialization:
string str = "Hello World";
这需要string(const char *)
构造函数为非explicit
(对于先前的方法,构造函数可以为explicit
)。
根据标准的版本,我们会有一些不同的行为:
string(const char *)
),然后调用复制(或移动)构造函数以初始化str
。因此,复制(或移动)构造函数需要可用。可以省略复制构造函数阶段(因此,就像直接初始化情况一样创建对象),但是仍然需要复制(或移动)构造函数。如果不可用,则代码将无法编译。string(const char *)
构造函数。复制(或移动)构造函数不需要可用。如果复制构造函数不可用,则代码仍会编译。因此,对于这种特殊情况,两次初始化之间的末尾没有真正的区别,因此,两个str
字符串将变为相同。
答案 1 :(得分:3)
两条线都定义了名为$VAR1 = {
'peach' => 1,
'pear' => 2,
'apple' => 3
};
的类型std::string
的变量,该变量由str
的构造函数构造,并以std::string
作为其参数。这些行没有区别。
[...] C字符串[...] C ++字符串[...]?
通常所说的C字符串不过是char const*
的零终止数组:
char
"foobar"; // an array of 7 const chars. 7 instead of 6 because it is 0-terminated.
char foo[] = "foobar"; // an array of 7 chars initialized by the string given
是C ++标准库的一类,用于管理动态长度的字符串资源。
答案 2 :(得分:1)
“ Hello World”是C字符串(字符的空终止序列)。在两种情况下,string
(或全名是std::string
)都是c ++字符串(不以null终止)。
两条线都调用使用c字符串并构造一个std::string
的同一构造函数。