C++ 向量 push_back 空括号
C++ vector push_back empty braces
我见过这样的代码
struct A {
int m;
};
vector<A> vec;
vec.push_back({});
我的问题是:
vec.push_back({});
和 vec.push_back(A{})
有什么区别?为什么我们可以在A{}
中省略A
?
What's the difference between vec.push_back({});
and vec.push_back(A{})
?
在这种情况下没有。
Why can we omit A
in A{}
?
您正在实例化一个 vector
来容纳 A
个元素。因此,它的重载 push_back()
methods will accept const A&
and A&&
input parameters. Modern C++ standards provide initialization rules 让编译器推断在这些上下文中使用的 {}
将构造一个 A
对象,这就是为什么您不需要在 [=14= 中指定类型的原因] 明确地。
仅供参考,vector
也有 emplace_back()
方法,您应该使用这些方法而不是推送空的 {}
:
vector<A> vec;
vec.emplace_back();
我见过这样的代码
struct A {
int m;
};
vector<A> vec;
vec.push_back({});
我的问题是:
vec.push_back({});
和 vec.push_back(A{})
有什么区别?为什么我们可以在A{}
中省略A
?
What's the difference between
vec.push_back({});
andvec.push_back(A{})
?
在这种情况下没有。
Why can we omit
A
inA{}
?
您正在实例化一个 vector
来容纳 A
个元素。因此,它的重载 push_back()
methods will accept const A&
and A&&
input parameters. Modern C++ standards provide initialization rules 让编译器推断在这些上下文中使用的 {}
将构造一个 A
对象,这就是为什么您不需要在 [=14= 中指定类型的原因] 明确地。
仅供参考,vector
也有 emplace_back()
方法,您应该使用这些方法而不是推送空的 {}
:
vector<A> vec;
vec.emplace_back();