我最近在Danny Kalev的文章Get to Know the New C++11 Initialization Forms中发现了一段有趣的代码:
class C
{
string s("abc");
double d=0;
char * p {nullptr};
int y[5] {1,2,3,4};
public:
C();
};
这条线string s("abc");
对我来说似乎很可疑。我认为在类中初始化成员时不允许使用构造函数。并且这段代码(简化为class C { string s("abc");
};`)不能编译
- clang 3.6.1(编译器参数是
-std=c++11 -Wall -Wextra -Werror -pedantic-errors
) - g++ 5.1.0(编译器参数相同
-std=c++11 -Wall -Wextra -Werror -pedantic-errors
:) - vc++ 18.00.21005.1(编译器参数是
/EHsc /Wall /wd4514 /wd4710 /wd4820 /WX /Za
) - vc++ 19.00.22929.0(编译器参数由服务预定义
/EHsc /nologo /W4 /c
:)
我是对的,这篇文章有错误吗?