2013-04-29 209 views
-7

我有代码,我打算过,看起来像这样:“::”在C++中是什么意思?

foo::foofa(string n){ 
    loadFoo(fn); 
} 

什么是富:: foofa是什么意思?我不太明白::做什么?谢谢。

编辑:另外,是否有另一种方式来写这没有::或是否需要?

+2

@NickVaccaro如果你不知道它被称为*范围解析运算符*,那么很难谷歌::。 OP需要做的是[读一本书](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – Praetorian 2013-04-29 18:34:20

+1

@Praetorian我复制并粘贴问题标题,结果立即显现。 – 2013-04-29 18:35:09

+1

@Nick所以它的确如此;我站好了! – Praetorian 2013-04-29 18:36:21

回答

7

::是用于标识和指定标识符引用的上下文的范围操作符。

使用非常简单谷歌搜索,IBM把它描述为:

的::(范围分辨率)运算符用于限定隐藏的名称,以便 ,你仍然可以使用它们。如果 名称空间作用域或全局作用域名称被块或类中相同名称的明确 声明隐藏,则可以使用一元作用域操作符。

+0

有没有另外一种方法可以编写这个代码,而不需要::或者那是必需的? – user12074577 2013-04-29 18:30:18

+0

不,范围操作符允许您访问这些类的功能。如果没有范围操作符,编译器会将它们视为单独和独特的功能。 – 2013-04-29 18:31:19

0
:: 

scope resolution操作。 从Scope Resolution Operator

援引::(范围分辨率)操作符使用,因此,你仍然可以使用它们来限定隐藏名称。如果名称空间作用域或全局作用域名称被块或类中的相同名称的明确声明隐藏,则可以使用一元作用域操作符。

您还可以使用类作用域操作符来限定类名称或类成员名称。如果某个类成员名称是隐藏的,则可以通过使用它的类名称和类作用域操作符对其进行限定来使用它。

0

::表示范围。所以无论是命名空间还是类名。例如,如果您要访问的排序功能标准(STD)的命名空间,你会使用

std::sort 
+0

...或结构名称。 – Beta 2013-04-29 18:31:06

4

我不太明白什么呢::办?

这是作用域分辨率运算符。

如果foo是一个类(或名称空间),并且foofa是在该类中声明的内容,那么在该类中可以简单地将其引用为foofa。但是在课堂之外,你需要使用这个操作符来指定你的意思是这个特定的foo::foofa;其他类或名称空间内可能有其他范围。

另外,有没有另一种方式来写这个没有::或它是必需的?

它在类定义之外是必需的。你可以定义函数的类中:

class foo { 
    void foofa(string n) { // No foo:: needed here 
     loadFoo(n); 
    } 
}; 

如果foo是一个命名空间,那么你也可以使用using以避免::需要但那往往是一个坏主意,所以我不会告诉你如何。