2

可能重复:
同名的类方法和变量,在 C++ 中编译错误而不是在 Java 中?

当我的类成员名和成员函数名相同时,G++ 编译器会报错。似乎每当变量名恰好与函数名相同时,编译器都会抱怨。

在 Java 中,情况并非如此。我只是想知道为什么 G++ 编译器无法区分变量名和函数名,因为函数名总是带有一对括号。

4

2 回答 2

8
struct Callable
{
    void operator()() const { }
};

struct Test
{
    void Call() { }
    Callable Call;
};

int main()
{
    Test x;
    x.Call(); // To which 'Call' does this refer?
}
于 2011-12-20T21:57:27.180 回答
3

这里有两个原因:

  • 变量可能过载operator()
  • 可能会获取函数的地址或创建引用(使用其名称而不使用关联的函数调用()

在第一种情况下,会variable()怎么做?其次,编译器必须通过操作的返回类型来确定正确的操作——由于各种原因,C++ 不允许这样做。

于 2011-12-20T21:57:01.097 回答