【发布时间】:2021-05-26 21:38:20
【问题描述】:
我见过类似的代码
struct A {
int m;
};
vector<A> vec;
vec.push_back({});
我的问题是:
vec.push_back({}); 和 vec.push_back(A{}) 有什么区别?为什么我们可以在A{} 中省略A?
【问题讨论】:
-
添加一个带有 vec.emplace_back() 的版本以获得乐趣。
我见过类似的代码
struct A {
int m;
};
vector<A> vec;
vec.push_back({});
我的问题是:
vec.push_back({}); 和 vec.push_back(A{}) 有什么区别?为什么我们可以在A{} 中省略A?
【问题讨论】:
vec.push_back({});和vec.push_back(A{})有什么区别?
在这种情况下,没有。
为什么我们可以在
A{}中省略A?
您正在实例化 vector 以保存 A 元素。因此其重载的push_back() 方法将接受const A& 和A&& 输入参数。现代 C++ 标准提供了initialization rules,让编译器推断在这些上下文中使用的{} 将构造一个A 对象,这就是为什么您不需要在A{} 中显式指定类型的原因。
仅供参考,vector 也有您应该使用的 emplace_back() 方法,而不是推送一个空的 {}:
vector<A> vec;
vec.emplace_back();
【讨论】:
push_back({}) 比使用emplace_back() 没有任何好处
vec.emplace(vec.end(), anotherVec[5])?