这是受此启发的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 基本上支持此功能功能已经很长一段时间了):
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/