-5

我有我要查看的代码,如下所示:

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

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

编辑:另外,还有另一种方法可以在没有 :: 的情况下编写它还是需要它?

4

4 回答 4

9

::是用于识别和指定标识符所指上下文的范围运算符。

使用一个非常简单的谷歌搜索,IBM 将其描述为:

::(范围解析)运算符用于限定隐藏名称,以便您仍然可以使用它们。如果命名空间范围或全局范围名称被块或类中同名的显式声明隐藏,则可以使用一元范围运算符。

于 2013-04-29T18:29:03.290 回答
8

我不太明白 :: 做什么?

它是范围解析运算符。

如果foo是一个类(或命名空间),并且foofa是在该类中声明的东西,那么在该类中您可以将其简单地称为foofa. 但是在类之外,您需要使用此运算符来指定您的意思是这个特定的foo::foofa; 在其他类或命名空间中可能还有其他范围。

::另外,是否有另一种方法可以在没有或是否需要的情况下编写它?

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

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

如果foo是命名空间,那么您也可以使用它using来避免需要,::但这通常是一个坏主意,所以我不会向您展示如何使用。

于 2013-04-29T18:32:21.057 回答
2
::

scope resolution运算符。引用自范围解析运算符

::(范围解析)运算符用于限定隐藏名称,以便您仍然可以使用它们。如果命名空间范围或全局范围名称被块或类中同名的显式声明隐藏,则可以使用一元范围运算符。

您还可以使用类范围运算符来限定类名或类成员名。如果隐藏了类成员名称,则可以通过使用其类名称和类范围运算符对其进行限定来使用它。

于 2013-04-29T18:29:21.873 回答
1

:: 表示范围。所以要么是命名空间,要么是类名。例如,如果您想访问标准(std)命名空间中的排序功能,您将使用

std::sort
于 2013-04-29T18:30:14.190 回答