首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++类成员函数中调用foo()和::foo()有什么区别?

在C++类成员函数中调用foo()和::foo()有什么区别?
EN

Stack Overflow用户
提问于 2022-06-14 22:15:55
回答 1查看 67关注 0票数 5

我正在查看其他人的C++代码(注意,我不太精通C++)。

在类中,有一个成员函数:

代码语言:javascript
复制
void ClassYaba::funcname()
{
    ...
    ::foo();
    ...
}

在名为foo的类名称空间中没有成员函数,但除此之外,::foo()foo() (没有前导冒号)之间有什么区别?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-14 22:19:00

当你打电话的时候

代码语言:javascript
复制
foo();

C++将按以下顺序搜索名为foo的内容:

  1. 是否在类中声明了这个名称?
  2. 在基类中有这个名称吗?
  3. 在声明该类的名称空间中有这个名称吗?(如果没有,在该名称空间的父名称空间中是否存在具有该名称的内容,如果没有发现,etc.?)
  4. Finally,是否在全局名称空间中有该名称?

另一方面,写作

代码语言:javascript
复制
::foo();

将使C++在全局命名空间中寻找纯粹的东西。

如果您的类中没有任何名为foo的类、它的任何基类或在其内部声明了任何名称空间foo,那么这两种方法之间没有区别。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72623961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档