这里是我的代码的extern const的默认构造的对象
#include <iostream>
using namespace std;
class Q
{
public:
Q() { cout << "constructor" << endl; }
};
extern const Q t/*()*/; //A
const Q s/*()*/; //B
int main()
{
const Q t/*()*/;
}
我希望行标有“A”的意思,我创建Q型,其联动是外部的对象吨,其字段不能被修改。创建是由没有参数的构造函数完成的,我已经提供了这个参数。
在我看来,我认为类型Q的本地t对象是以相同的方式创建的,虽然它的链接必然只是这个文件,事实上,它的作用域和持续时间只是主要的。
C++允许我在const Q t/() /中放置或不放置圆括号。主要。在全局范围内,在A行中,我可以放或不放括号,也不会调用构造函数。
在B行中,我只允许不放置括号,否则编译器会困惑,如果我定义的函数原型。
我的问题是:
为什么我允许灵活地把()或者不符合// A,考虑到在行// B这种灵活性不存在?
不管我在1中的选择如何,我发现“构造函数”不是由行A打印,即使它是在行B中打印。为什么?我对此没有什么期望。一方面,打印它是合理的,因为我们认为C++可以理解即使没有括号也可以调用0参数构造函数。另一方面,如果是这种情况,那么我将如何做一个类定义的非定义声明?
Ir的问题并不完全清楚,但这个'const Q s()'不构造任何东西,它声明了一个函数。在这里和其他地方搜索“最令人头疼的解析”。 –
@NeilButterworth我如何澄清我在问什么?这些parens被注释掉了。他们不会被允许,因为你和我都注意到了。 – Jeff
他们_将被允许。在这里发布时,_don't_发表了注释掉的代码 - 这只会让你很难理解你实际询问的内容,并且如果我们想编译它,就要求我们编辑代码。 –