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

Anonymous (?) initialization of a struct passed as an argument in C++03

本文关键字:参数传递 结构 初始化      更新时间:2023-10-16

说,我有

struct Foo
{
    char a;
    char b;
};
void bar(Foo foo);

初始化结构并将其传递给功能的最简洁的方法是什么?理想情况下,我想写

之类的东西
bar(Foo = {'a','b'});

如果Foo是工会怎么办?

upd:我真诚地抱歉,这个问题应该仅与C 03有关。同样,在这种特殊情况下,应避免远离POD(该代码适用于嵌入式系统,追求ergo较短的字节码)。vonbrand,感谢C 11答案。

在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

您可以在结构中添加一个构造函数。例如

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

然后您可以调用您的功能

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

如果是工会,您可以为不同类型的工会拥有不同的构造函数。