C++ 在c+中放置任何类型的表达式在语法上正确吗+';什么是初始化列表?
我在一本教科书中找到了这个班级定义:C++ 在c+中放置任何类型的表达式在语法上正确吗+';什么是初始化列表?,c++,syntax,constructor,initializer-list,C++,Syntax,Constructor,Initializer List,我在一本教科书中找到了这个班级定义: class Smiley : public Circle { // use the circle as the base for a face public: Smiley(Point p, int r) : Circle{p,r}, mouth{nullptr} { } 我对构造函数的初始化列表有一个问题。Circle{p,r}部分应该是关于构造一个基本对象的,它看起来不像是放在初始化列表中的东西。这是否意味着您可以在初始化列表中放置任何类型的表达式
class Smiley : public Circle { // use the circle as the base for a face public:
Smiley(Point p, int r) : Circle{p,r}, mouth{nullptr} { }
我对构造函数的初始化列表有一个问题。Circle{p,r}
部分应该是关于构造一个基本对象的,它看起来不像是放在初始化列表中的东西。这是否意味着您可以在初始化列表中放置任何类型的表达式
圆{p,r}部分应该是关于构造基础对象的
对
它看起来不像你放在初始化列表中的东西
不管它看起来像什么,成员初始化器列表都是初始化基本子对象的位置。尽管它的名字里有成员。从技术上讲,子对象初始化器列表将是更准确的名称
这是否意味着您可以在初始化列表中放置任何类型的表达式
没有;现在还不清楚你会如何得出这样的结论。成员初始值设定项列表的语法如下:
ctor-initializer:
: mem-initializer-list
mem-initializer-list:
mem-initializer ... opt
mem-initializer-list , mem-initializer ... opt
mem-initializer:
mem-initializer-id ( expression-list opt )
mem-initializer-id braced-init-list
mem-initializer-id:
class-or-decltype
identifier
如果mem初始值设定项id
为class或decltype
,则mem初始值设定项
用于基础,如果标识符
用于成员
在表达式列表中,也不能放置任意类型的表达式。语法是:
expression-list:
initializer-list
initializer-list:
initializer-clause ... opt
initializer-list , initializer-clause ... opt
initializer-clause:
assignment-expression
braced-init-list
braced-init-list:
{ initializer-list , opt }
{ designated-initializer-list , opt }
{ }
“它看起来不像是您放在初始化列表中的东西”-为什么不?在哪里初始化基?
Circle{p,r}
是对父类构造函数的“调用”(实际上不是正确的词)。它允许父类循环类初始化自身。您还可以将基本对象初始化放在哪里?构造函数主体太晚了。