我不能这样做:
class A
{
public:
A()
{
}
};
A a1();
因为A a1();
看起来像是一个函数原型。
但我可以这样做:
class B
{
public:
B(std::string argument)
{
std::cout << argument;
}
};
B b1("Text");
这两件事基本相同,只是编译器能够将B b1("Text");
区分为NOT不是函数原型,因为有些数据是在括号中传递的。
为什么必须为A省略括号,或者原因是因为编译器认为它是函数定义?
答案 0 :(得分:0)
就是这样,它被称为最令人烦恼的解析。原因是如果将A a1();
视为对象声明,则无法使用该原型声明函数。并且你希望能够声明一个函数,对吧?
B b1("Text");
有效,因为它不能被视为函数原型,但是,例如B b(A());
可以和将来。