2011-05-09 164 views
2
​​

在成员函数声明中指定C是什么意思?为什么在声明成员函数时指定类名?

+1

我们之所以这样做,是因为它使得剪切/粘贴和定义/声明之间的搜索更加容易。但是对于现代的IDE,没有必要,现在它是非法的。 – 2011-05-09 21:26:49

+0

@Martin Becket:严格地说,即使在C++ 98中它也是非法的。即使有一段时间它是合法的,它一定是一些标准前的时期。 – AnT 2011-05-09 23:51:13

回答

4

你不应该这样做。许多现代编译器会将其视为语法错误,例如,g ++ 4.2.1将会!

1

没有意义,也没有必要这样做。由于Test的声明在C声明的范围内,编译器知道函数TestC的成员。

2

定义方法时之类的外部这只是neccessary:

class C : public B 
{ 
public: 
    void Test(); 
}; 

void C::Test() { ... } 
+0

但是,在你的例子似乎暗示的类定义中声明它*时。 – 2011-05-09 21:24:05

+0

你是什么意思(可能你指的是一个错误的帖子,我在发帖后不久编辑,实际上是从问题中复制粘贴并忘记删除错误)。 – 2011-05-09 21:37:24

+0

是的,我提到了早期版本。现在看起来很好。 – 2011-05-09 22:21:47

2

不仅没有一点上,它是非法的透顶(见8.3/1中的语言标准)。通常,在C++语言限定名是当你指的是先前声明实体唯一允许的,但不是当您将引入一个新的实体(也有从这个规则有些例外,但他们都不在这里适用)。

由于您的成员函数声明无效,因此您发布的代码需要来自任何符合规范的编译器的诊断消息。

+0

我知道这是非法的,但我无法找到原因。有没有注释,还是语法? – GManNickG 2011-05-09 22:20:47

+0

@GMan:它在8.3/1。基本上,限定名称只能用于引用先前声明的实体,而不能引入新的实体。另请参阅此缺陷:http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#482。旧的(有缺陷的)措辞更为明确,但就这个例子而言,新措词没有什么真正的改变。 – AnT 2011-05-09 23:16:17

+0

啊,我明白了。谢谢。 – GManNickG 2011-05-09 23:21:18

相关问题