2

这受到这篇文章的启发,其中 不支持非平凡的指定初始化程序

我已经阅读了这篇文章,并且一些答案声称已经支持此功能。

但是,使用 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++17 后)?

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

编译器

GNU C++17 - 检查魔杖盒

4

1 回答 1

5

有意为 C++20 ( p0329r0 )添加指定初始化程序的提议是有限的(请注意,作为官方语言功能,它专门是 C++20 功能 - 但 gcc 和 clang 长期以来一直支持此功能已经):

在此处输入图像描述

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

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

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

于 2018-06-25T15:21:47.447 回答