我对C ++初始化有疑问。
在Java中:如果我想要一个空的StringBuffer,我应该使用
StringBuffer sb = new StringBuffer();
初始化一个空字符串缓冲区。
在C ++中:如果我想使用空字符串,我可以声明
std::string str;
或std::string str = "";
在现实世界的项目中,我应该像第二种形式一样写作吗?
如何声明空向量?
vector<int> vec;
这样好吗?或者我应该给这个vec一些空值?
答案 0 :(得分:4)
std:string和std:vector是类,而不是基本类型:这意味着与Integer不同,Integer在声明时刻作为伪随机值,字符串和向量具有明确定义的初始值。
std :: string的默认值是“”。
std :: vector的默认内容是{}。
您可以使用您喜欢的内容,但初始化不是必需的,甚至不是最佳的。
答案 1 :(得分:1)
std :: string str(“”); 它执行直接初始化并使用string(const char *)构造函数。
std :: string str =“”; 它进行复制初始化。
std :: string str; 它会创建空字符串。
选项3与其他选项一样,开销更少。用它 从这里了解更多关于差异的信息 What's the motivation behind having copy and direct initialization behave differently?