【问题标题】:What does "::" mean in c++? [duplicate]C++ 中的“::”是什么意思? [复制]
【发布时间】:2013-04-29 18:28:09
【问题描述】:

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

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

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

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

【问题讨论】:

  • @NickVaccaro 如果您不知道 :: 被称为 范围解析运算符,那么很难搜索到它。 OP需要做的是read a book
  • @Praetorian 我复制粘贴了题名,结果立马就出来了。
  • @Nick 确实如此;我的立场是正确的!

标签: c++ class function


【解决方案1】:

:: 是作用域运算符,用于识别和指定标识符所指的上下文。

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

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

【讨论】:

  • 有没有其他方法可以在没有 :: 的情况下编写此代码,或者是否需要这样做?
  • 不,范围运算符允许您访问这些类函数。如果没有范围运算符,编译器会将它们视为单独且唯一的函数。
【解决方案2】:

我不太明白 :: 是做什么的?

它是 范围解析 运算符。

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

另外,还有没有:: 的另一种写法,还是必须的?

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

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

如果foo 是一个命名空间,那么您也可以使用using 来避免使用::,但这通常是个坏主意,所以我不会告诉您如何操作。

【讨论】:

    【解决方案3】:
    ::
    

    scope resolution 运算符。 引用自Scope Resolution Operator

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

    您还可以使用类范围运算符来限定类名或类成员名。如果一个类成员名是隐藏的,你可以通过使用它的类名和类范围操作符来限定它。

    【讨论】:

      【解决方案4】:

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

      std::sort
      

      【讨论】:

        猜你喜欢
        • 2019-09-12
        • 2018-06-24
        • 2011-03-29
        • 1970-01-01
        • 2019-12-08
        • 2015-06-25
        • 1970-01-01
        • 2013-02-12
        相关资源
        最近更新 更多