为什么在定义 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
您需要范围解析运算符来说明您要定义的方法。
我关于范围解析运算符 (::) 的问题是为什么我们在 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
您需要范围解析运算符来说明您要定义的方法。