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