c++ - 使用花括号初始化临时聚合对象

标签 c++ constructor initialization aggregate curly-braces

假设我有一个类:

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/

相关文章:

c++ - C++ 中的另一个静态数组初始化

c++,对每个数组成员执行函数

c++ - fstream 初始化为一个类

oop - 如何在golang中创建一个自动调用的结构方法?

javascript - 在 JavaScript 中初始化变量有什么好处?

c++ - 将字符串初始化为 null 与空字符串

c++ - 如何查询类似于 "net use"的内存 UNC 连接?

C++14 auto lambda 可以接受 Obj<std::tuple<void>>——但模板函数不能?

c++ - 在 Visual Studio 2015 中运行单个 .cpp 文件?

c++ - 初始化 const 对象中的引用