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();