【问题标题】:C++ "::" to implement methods in classesC++ "::" 在类中实现方法
【发布时间】:2021-09-13 07:31:42
【问题描述】:

我对 C++ 很陌生,发现了以下代码示例。

“::”运算符能否以这种方式使用,为什么或应该只用于声明的命名空间?

class Test {

    void dosmthng();

};


void Test::dosmthng() {}

【问题讨论】:

  • 如果你正在学习,我建议为这个curated book list挑选一本书。您找到的代码是一个非常标准的 C++ 示例。因此,如果不清楚,您的学习资源可能值得升级。

标签: c++ class namespaces


【解决方案1】:

:: 运算符称为 Scope Resolution Operator。 在类中声明的名称与class scope相关。搜索类范围的名称需要遵守一些规则。

什么情况下会在类范围内搜索名称?

如果在全局函数中使用该名称,则必须在 3 种情况之一中使用该名称,以便在类范围内搜索该名称。

  1. 如果名称用于point operator 的右侧。 (.)
  2. 如果名称用于arrow operator 的右侧。 (->)
  3. 如果名称用作scope resolution operator 的右操作数。 (::)

与名称搜索相关的三个重要过程和顺序如下。

  1. Name Lookup => 首先搜索名称。

  2. Context Control=> 其他语言规则。例如,在需要左值的情况下使用右值等错误。

  3. Access Control => 面向对象编程语言中的一个单独的控件类别。它在编译时完成。

作用域解析运算符的左操作数必须是C++中的名称。该名称可以是命名空间名称,也可以是类名称。如果是类名称,则为右操作数 它将在该类的范围内进行搜索。 总而言之,它是用于名称查找的语言的重要运算符之一。

【讨论】:

    【解决方案2】:

    运算符:: 常用于上述两种情况

    【讨论】:

      猜你喜欢
      • 2019-07-09
      • 2012-02-07
      • 2010-10-27
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 2013-02-25
      相关资源
      最近更新 更多