没有范围的范围解析运算符
时间:2020-03-05 18:56:43 来源:igfitidea点击:
在C ++中,不带范围使用范围解析运算符的目的是什么?例如:
::foo();
解决方案
回答
指全球范围
回答
如果在本地作用域中已经有一个名为foo()的函数,但是我们需要在全局作用域中访问该函数。
回答
我的c ++生锈了,但是我相信如果我们有一个在局部范围内声明的函数,例如foo()和一个在全局范围内声明的函数,则foo()则是指局部的。 :: foo()将引用全局变量。
回答
这意味着全球范围。如果在同一作用域中具有冲突的函数或者变量,并且需要使用全局运算符,则可能需要使用此运算符。我们可能有类似以下内容:
void bar(); // this is a global function class foo { void some_func() { ::bar(); } // this function is calling the global bar() and not the class version void bar(); // this is a class member };
如果需要从类成员函数中调用全局bar()函数,则应使用:: bar()来获取函数的全局版本。
回答
还应注意,名称解析发生在重载解析之前。因此,如果我们当前的作用域中有同名的东西,那么它将停止寻找其他名称并尝试使用它们。
void bar() {}; class foo { void bar(int) {}; void foobar() { bar(); } // won't compile needs ::bar() void foobar(int i) { bar(i); } // ok }