在C++;标准文档,如何知道下标“的范围”;“选择”;有效果吗? 这是一个如何阅读和理解C++标准文档的一般问题。我想知道的不是构造函数初始值设定项的语法。事实上我知道

在C++;标准文档,如何知道下标“的范围”;“选择”;有效果吗? 这是一个如何阅读和理解C++标准文档的一般问题。我想知道的不是构造函数初始值设定项的语法。事实上我知道,c++,C++,我在看书。在第12.6.2节中,构造函数初始值设定项的语法解释如下 ctor初始值设定项: :mem初始值设定项列表 mem初始值设定项列表: 内存初始化器。。。选择 mem初始值设定项,mem初始值设定项列表。。。选择 mem初始值设定项: mem初始值设定项id(表达式列表选项) mem初始值设定项id带括号的初始列表 mem初始值设定项id: 类或decltype 标识符 现在,在考虑 内存初始化器。。。选择 ,您如何知道下标“opt”的作用范围?整体上只有三个点“…”或“mem初始值设

我在看书。在第12.6.2节中,构造函数初始值设定项的语法解释如下

ctor初始值设定项:
:mem初始值设定项列表

mem初始值设定项列表:
内存初始化器。。。选择
mem初始值设定项,mem初始值设定项列表。。。选择

mem初始值设定项:
mem初始值设定项id(表达式列表选项)
mem初始值设定项id带括号的初始列表

mem初始值设定项id:
类或decltype
标识符


现在,在考虑

内存初始化器。。。选择

,您如何知道下标“opt”的作用范围?整体上只有三个点“…”或“mem初始值设定项…”

因为下面的代码无法编译,所以您可以“确认”下标作用于三个点“…”

所以您可以这样重写,其中括号()是分组

mem初始值设定项((…)opt)



接下来,考虑另一种表达方式

mem初始值设定项,mem初始值设定项列表。。。选择

一个简单的检查告诉你应该这样读

mem初始值设定项((,mem初始值设定项列表…)选项)

例如,此代码无法编译

class Example {
    private:
        int x;
    public:
        Example() : x(3), { } //=> Error: comma should be omitted.
};


那么,范围是如何定义的呢?(可选:另外,我认为三点的含义不明确。在文档的哪一页定义了三点?)

尽管第1.6-1节说

可选终端或非终端符号由下标“opt”表示


,但我认为这并不能解决我的问题(或者我不理解终端/非终端符号)。

“opt”仅适用于前面的符号。在“mem initializer,mem initializer list…[opt]”中,“opt”仅适用于省略号(否则
x(3)
将匹配两条语法规则)。@cppleener如果是,省略号在“mem initializer,mem initializer list…[opt]”中代表什么?包括逗号吗?(否则我认为
x(3),y(3)z(3)
是有效的。但这是无效的。)如果是,为什么?顺便说一句,三思而后行,现在看来第一个表达式“mem initializer…[opt]”本身也很奇怪,因为没有逗号。省略号表示文字省略号
。这表示你很高兴,非常感谢。现在我觉得语法解释很自然。你是“…”——如果你仔细看,你会发现“…”是代码字体,也就是说,它是文字。如果这对你来说不明显,不要踢自己;这很微妙。
class Example {
    private:
        int x;
    public:
        Example() : x(3), { } //=> Error: comma should be omitted.
};