代码之家  ›  专栏  ›  技术社区  ›  Joseph D.

将来是否支持非平凡的指定初始值设定项(post c++17)?

  •  2
  • Joseph D.  · 技术社区  · 6 年前

    它的灵感来源于 post 哪里 非平凡的指定初始值设定项 不支持。

    我已经读过了 this post 一些答案声称此功能已经得到支持。

    但是,使用C++17和以下代码:

    struct s {
        int a[2];
        s (int b): a{[1]=b} {} // error
    };
    
    s foo(1);
    

    我还是有错误:

    抱歉,未实现:非琐碎指定 不支持初始值设定项

    s (int b): a{[1]=b} {}

    我觉得这个功能真的很有用。

    所以我的问题是:

    有没有支持未来C++版本(C++ C++ 17)的计划?

    • 如果 ,为什么不支持它最大的障碍是什么?
    • 如果 ,当前的c++版本有什么问题,为什么需要很长时间才能支持它?

    编译程序

    GNU C++17-检查 wandbox

    1 回复  |  直到 6 年前
        1
  •  4
  •   Barry    6 年前

    在C++20中添加指定的初始值设定项的建议( p0329r0 是故意的(注意到,作为官方语言特征,它特别是C++ 20的特性——但是GCC和CLAN已经基本上支持了这个特性很长时间了):

    enter image description here

    C++是比C语言更复杂的语言,我们有更多的事情需要担心。因此,我们得到的规则是,你不能混合指示符和值,这些标识符以声明顺序出现,是唯一的,既不是嵌套的也不是数组索引。这已经是一个非常有用的语言特性了。

    如果 ,为什么不支持它最大的障碍是什么?

    动机,可能。我们真的需要这种语法吗?这是一个需要解决的问题吗?在不利方面,可能有解析歧义-您可能会构建数组索引初始化器,看起来很像。但如果你觉得这足够值得,你可以写一个建议。