构造函数语法中的括号

4

12.1/1. 构造函数没有名字。使用一种特殊的声明符号语法来声明或定义构造函数,其包括一个可选的函数说明符序列(7.1.2)、紧随其后的构造函数所在的类名称和一个参数列表。在这样的声明中,对于构造函数类名称周围的可选括号将被忽略。

读取上述文本,我想知道下面示例中的构造函数名称周围被忽略的圆括号是什么?

class MyClass
{
    MyClass();
};

MyClass::MyClass() {
}
1个回答

6

您的代码片段中没有可选括号。以下示例在构造函数类名周围使用了可选括号,但这些括号会被忽略:

class MyClass
{
    (MyClass)();
};

MyClass::MyClass() { }

2
有任何想法为什么允许这样做?顺便说一句,似乎我们无法执行 MyClass::(MyClass)() { } - Aaron McDaid
2
@AaronMcDaid:可能是C声明符号语法。你知道你也可以写成 int(i); 而不是 int i; 吗? ;) - fredoverflow
@FredOverflow,太疯狂了 :-) 我本以为 int(i); 是一个表达式,它构造了一个 int,并用 i 初始化,就像 int j = int(i); 一样。在 C++ 中有一些有趣的“模棱两可”的解析。 - Aaron McDaid
(MyClass)(); 不是一个声明,而是一个表达式。因此,12.1/1 中引用的部分不适用于此示例。有关正确示例,请参见 http://ideone.com/IUx47。 - MSalters
@MSalters:...你的例子和我的完全一样,只是把MyClass替换成了X - James McNellis
@JamesMcNellis:嗯,好的,我错了。我弄混了哪些代码是你的,哪些是我的变体。 - MSalters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接