【发布时间】:2012-12-08 04:30:08
【问题描述】:
我有一个关于在 c++11 中定义向量的新快捷方式的问题。假设我有以下课程
struct Tester{
vector< vector<int> > data;
Tester(){
data = vector< vector<int> >();
}
void add(vector<int> datum){
data.push_back(datum);
}
};
然后,以下工作按预期工作:
int main(){
Tester test = Tester();
vector<int> datum = vector<int>{1,2,3};
test.add(datum);
}
但这不是:
int main(){
Tester test = Tester();
test.add(vector<int>{1,2,3});
}
有人可以向我解释一下区别吗?如何执行我在第二个 main() 中尝试的快捷方式?
【问题讨论】:
-
C++11 允许您在模板括号之间不留空格:
vector<vector<int>>是合法的。 -
您还应该发布您在第二次尝试时遇到的错误。在我的脑海中,如果手头没有 C++11 编译器,我认为它可以只使用初始化列表 (
test.add({1,2,3})) 或使用括号括起来 (test.add(vector<int>({1,2,3})))。 -
data = vector< vector<int> >();完全是多余的,可能会指出对 C++ 构造函数和初始化的根本误解。 -
与错误无关,但您可以通过使用参考来避免
add方法中的潜在副本:void add(const vector<int>& datum)