为什么在定义 class' 方法时使用范围解析运算符?

Why do you use a Scope Resolution Operator when defining a class' method?

我关于范围解析运算符 (::) 的问题是为什么我们在 CPP 文件中使用它来定义 class 的方法?我更想问的是 SRO 本身,而不是 CPP 和头文件之间的关系。

当你定义一个class:

struct foo {
    void bar() {}
};

那么bar的全称是::foo::bar。引用全局命名空间的前导 :: 通常可以省略。全局命名空间中没有 bar,因此 bar 单独(或 ::bar)不会命名实体,当您定义方法时,您需要告诉什么 bar 你的意思是:

 struct foo { 
       void bar();
 };
 struct baz {
       void bar();
 };

 void bar() {}    // this defines a completely unrelated free function called bar

 void foo::bar() {} // defines foo::bar
 void baz::bar() {} // defines baz::bar

您需要范围解析运算符来说明您要定义的方法。

更多详情请参考https://en.cppreference.com/w/cpp/language/lookup