假设我有一个类:
class Aggregate {
public:
int x;
int y;
};
我知道如何使用大括号初始化一个对象:
Aggregate a1 = { 1500, 2900 };
但是我找不到合适的语法来创建临时对象并将其作为参数传递给某些方法,例如:
void frobnicate(const Aggregate& arg) {
// do something
}
//...
frobnicate(Aggregate {1500, 2900}); // what should this line look like?
最简单的方法是将构造函数添加到 Aggregate 类,但假设我无权访问 Aggregate header 。另一个想法是编写某种工厂方法,即
Aggregate makeAggregate(int x, int y).
我还可以创建一个对象,然后将其作为参数传递等等。
有很多解决方案,但我很好奇是否可以使用花括号初始化来实现这个目标。
最佳答案
C++0x 初始化列表可以满足您的需求。
class Aggregate {
public:
int x, y;
};
void frobnicate(const Aggregate& arg) {
}
int main() {
frobnicate({1, 2});
return 0;
}
GCC 4.4 已经通过 -std=c++0x
标志支持这一点。可能 VS2010 CTP 也支持这个(如果我错了请纠正我)。
使用 C++98/C++03,您将必须编写和调用构造函数。
关于c++ - 使用花括号初始化临时聚合对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1525326/