如果在声明中初始化了非静态数据成员,C++ 11是否允许将其声明为“自动”?例如:
struct S
{
auto x = 5; // in place of 'int x = 5;', which is definitely allowed
};
GCC 4.7接受
int x = 5;
时,拒绝上述代码。假设这不是编译器错误,而是标准确实不允许这样做,为什么不呢?它与声明局部变量
auto
一样有用。 最佳答案
禁止非静态成员的规则在7.1.6.4第4节中:
我发现它的基本原理是静态here,它反射(reflect)了James McNellis在评论中的解释。
因此,基本上取决于 header 包含的顺序,data
的类型可能会非常不同。当然,auto x = 5;
不必依赖于两阶段名称查找或ADL,但是,我假设他们将其设置为“空白”规则,因为否则,他们将必须为每个用例制定单独的规则,使事情变得非常复杂。
在同一篇文章中,作者建议消除此限制,但是,似乎由于上述原因,该提议已被拒绝,而且无论初始化程序是什么,预期行为都可以相同。
关于c++ - C++ 11-将非静态数据成员声明为 'auto',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23893865/