C ++ String \ Vector初始化

时间:2014-10-10 23:31:54

标签: c++ initialization

我对C ++初始化有疑问。

在Java中:如果我想要一个空的StringBuffer,我应该使用

StringBuffer sb = new StringBuffer();

初始化一个空字符串缓冲区。

在C ++中:如果我想使用空字符串,我可以声明

std::string str; 

std::string str = "";

在现实世界的项目中,我应该像第二种形式一样写作吗?

如何声明空向量?

vector<int> vec;

这样好吗?或者我应该给这个vec一些空值?

2 个答案:

答案 0 :(得分:4)

std:string和std:vector是类,而不是基本类型:这意味着与Integer不同,Integer在声明时刻作为伪随机值,字符串和向量具有明确定义的初始值。

std :: string的默认值是“”。

std :: vector的默认内容是{}。

您可以使用您喜欢的内容,但初始化不是必需的,甚至不是最佳的。

答案 1 :(得分:1)

  1. std :: string str(“”); 它执行直接初始化并使用string(const char *)构造函数。

  2. std :: string str =“”; 它进行复制初始化。

  3. std :: string str; 它会创建空字符串。

  4. 选项3与其他选项一样,开销更少。用它 从这里了解更多关于差异的信息 What's the motivation behind having copy and direct initialization behave differently?