在C ++中初始化并返回一行结构

时间:2010-06-20 17:45:57

标签: c++ struct

这可能吗?

我知道您可以使用列表语法初始化结构。

IE

struct Foo f = { a, b, c};
return f;

是否可以像在类和构造函数中那样在一行中执行此操作?

由于

2 个答案:

答案 0 :(得分:23)

如果您希望结构保持为POD,请使用创建它的函数:

Foo make_foo(int a, int b, int c) {
    Foo f = { a, b, c };
    return f;
}

Foo test() {
    return make_foo(1, 2, 3);
}

使用C ++ 0x uniform initialization不再需要该函数:

Foo test() {
    return Foo{1, 2, 3};
    // or just: 
    return {1, 2, 3};
}

答案 1 :(得分:14)

为struct创建一个构造函数(就像一个类),然后执行

return Foo(a,b,c);

编辑:只是为了澄清:C ++中的结构就像类一样,它们的默认访问权限是公共的(而不是类中的私有)。因此,您可以非常简单地创建构造函数,例如:

struct Foo {
  int a;
  Foo(int value) : a(value) {}
};