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

标签 c++ designated-initializer

这是受此启发的post在哪里 不支持非平凡的指定初始值设定项

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

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

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

s foo(1);

我仍然收到错误:

sorry, unimplemented: non-trivial designated initializers not supported

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

我认为这个功能真的很有帮助。

所以我的问题:

future 的 C++ 版本(C++17 之后)是否有计划支持此功能?

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

编译器

GNU C++17 - 检查 wandbox

最佳答案

向 C++20 添加指定初始化器的提案 ( p0329r0 ) 是有意限制的(请注意,作为官方语言功能,它具体是 C++20 功能 - 但 gcc 和 clang 基本上支持此功能功能已经很长一段时间了):

enter image description here

C++ 是一种比 C 更复杂的语言,我们有更多的事情需要担心。因此,我们得到的规则是不能混合指示符和值,指示符按声明顺序出现,是唯一的,并且既不是嵌套的也不是数组索引。按原样来说,这已经是一个非常有用的语言功能。

If not, what is the biggest hindrance why it's not going to be supported

可能是动机。我们真的需要那种语法吗?这是一个需要解决的问题吗?不利的一面是,可能存在解析歧义 - 您可能能够构造看起来很像 lambda 的数组索引初始值设定项。但如果您认为足够值得,您可以写一份提案。

关于c++ - 将来是否会支持非平凡的指定初始值设定项(C++17 后)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51026674/

相关文章:

c - 使用指定的初始化程序初始化数组时出现奇怪的值

c++ - 我收到 [Error] 'Eintrag' does not name a type 我不知道为什么

c# - TFS : Keeping history while formatting document

C++ 在 STL 容器中使用智能指针

swift - 在不提供 NSTextContainer 的情况下初始化 NSTextView 的子类

c++ - 使用 Qt GUI 打包线程程序

c++ - 我怎样才能像 Microsoft 应用程序一样创建 TreeView

c - 具有指定初始化程序的 MSVC12 (VS2013) 中可能存在编译器错误

C99 通过带大括号的指针初始化数组