gpt4 book ai didi

c++ - 结构可以在方法体内声明,但前提是它不包含成员字段初始值设定项。编译器错误与否?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:48 27 4
gpt4 key购买 nike

我花了一个小时才找到这个问题。以下代码

class Test {
public:
void method();

int _member;
};

void Test::method()
{
struct S {
int s = 0; // same with int s {0};
};

_member;
}

int main(int argc, const char* argv [])
{
return 0;
}

产生编译错误:

1>error C2327: 'Test::_member' : is not a type name, static, or enumerator
1>error C2065: '_member' : undeclared identifier

当我将 int s = 0; 替换为 int s; 时,错误就消失了。

这只发生在 MSVC 2013 中,而不是 2015 中。我很确定这是一个编译器错误,但我想确保它不是我不熟悉的某些 C++ 特性(在 C++11 和C++14).

最佳答案

[C++11: 12.6.2] 在 C++11 中定义了 NSDMI,本节和文档中的任何其他部分都没有定义这种语法约束。因此,这一定是一个实现错误。

而且,由于 GCC、Clang 和 Visual Studio 2015 都接受该代码,我认为没有必要进行更详细的调查。

关于c++ - 结构可以在方法体内声明,但前提是它不包含成员字段初始值设定项。编译器错误与否?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38248293/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com