c++ - 使用构造函数的类内成员初始值设定项 : is it allowed?

标签 c++ c++11 constructor initialization in-class-initialization

我最近在 Danny Kalev 的文章 Why can't member initializers use parentheses? 中发现了一段有趣的代码:

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"); };`)无法编译

我说得对吗?这篇文章有错误吗?

最佳答案

Am I right and there is an error in this article?

是的,文章中有一个错误。

数据成员的声明中只允许使用大括号或等于初始值设定项。 dpy 的初始化是正确的,但 s 的初始化不正确。这样做的理由是,使用表达式列表会使声明与函数声明产生歧义,并且还会导致与类主体中的名称查找发生冲突。

关于c++ - 使用构造函数的类内成员初始值设定项 : is it allowed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30671332/

相关文章:

c++ - 在类构造函数中为元素构造函数设置不同值的 std::vector

java - 子构造函数似乎在没有我调用的情况下调用了父构造函数

c++ - 将引用用作数组/指针是否合法?

c++ - 未初始化的引用是否为零初始化和未初始化的标量默认初始化?

c++ - 尽管编译了库的通用版本和 i386 版本,但未找到体系结构 i386 的符号

constructor - Solidity 解析器错误 : Expected identifier but got '='

c++ - 将位图设置为 CStatic 对象

c++ - 我应该为 DirectX 11 使用什么 SDK?

c++ - Eclipse 索引器显示误报语义错误

c++ - 为什么 std::array::size constexpr 具有简单类型(int、double、...)而不是 std::vector (GCC)?