0

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

4

1 回答 1

1

当你定义一个类时:

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

于 2022-02-10T13:15:39.920 回答