在C ++ 03中作为参数传递的结构的匿名(?)初始化

时间:2014-03-08 01:09:58

标签: c++ struct initialization anonymous

说,我有

struct Foo
{
    char a;
    char b;
};

void bar(Foo foo);

初始化结构并将其传递给函数的最简洁方法是什么?理想情况下,我想写一些类似

的内容
bar(Foo = {'a','b'});

如果Foo是一个工会怎么办?

UPD:我真诚地道歉,这个问题应该只与C ++ 03有关。此外,在这种特殊情况下,应避免远离POD(代码用于嵌入式系统,寻求更短的字节码)。 vonbrand,感谢C ++ 11的回答。

2 个答案:

答案 0 :(得分:4)

在C ++ 11中,你可以写:

bar({'a', 'b'});

或:

bar(Foo{'a', 'b'});

(参见Stroustup的C++11 FAQ

g ++ - 4.8.2只有在你给它-std=c++11时才接受这个没有投诉,clang ++ - 3.3会给出错误,除非-std=c++11

答案 1 :(得分:1)

您可以在结构中添加构造函数。 e.g。

struct Foo
{
    Foo(char a, char b) : a(a), b(b) {}
    char a;
    char b;
};

然后你可以调用你的函数

bar(Foo('a', 'b'));

如果它是一个联合,你可以为不同类型的联合使用不同的构造函数。