首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++阴影变量名

C++阴影变量名
EN

Stack Overflow用户
提问于 2014-12-17 14:59:53
回答 3查看 1.8K关注 0票数 1

如果一个C++类成员函数访问一个包含定义重载的变量名,定义既作为类的成员变量,又作为成员函数定义的全局范围中的变量,那么成员函数将实际访问哪个变量?情况如下:

某某阶层:

代码语言:javascript
复制
class   SomeClass
{
    int Num;
    void    OperateOnNum();
};

SomeClass.cpp:

代码语言:javascript
复制
#include "SomeClass.h"
int Num;
void    SomeClass::OperateOnNum()
{
    Num = 0;
}

OperateOnNum将对哪一个名词进行手术?Microsoft Visual Studio 2013和GCC (版本: gcc (Ubuntu4.8.2-19ubuntu1) 4.8.2)都没有发出警告。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-17 15:08:46

类变量隐藏全局变量。如果要访问全局变量,请执行以下操作:

代码语言:javascript
复制
void SomeClass::OperateOnNum()
{
    ::Num = 0;
}

没有警告,因为语言就是这样运作的。

票数 4
EN

Stack Overflow用户

发布于 2014-12-17 15:22:44

您可以始终使用this和全局范围解析来消除两者之间的差异。

代码语言:javascript
复制
this->Num; // refers to the member Num
::Num;     // refers to the global Num

一个好的设计,不应该采取这样的方法。您可以相应地标记成员名称和全局(它们本身是“不”):

代码语言:javascript
复制
_name;  // member name prefixed with _
m_name; // member name prefixed with m_
global_name; // global name - prefixed with global_
票数 1
EN

Stack Overflow用户

发布于 2014-12-17 15:04:46

在这种情况下,类成员参数阴影全局变量。因此,您可以在方法的范围内看到它。

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

https://stackoverflow.com/questions/27528453

复制
相关文章

相似问题

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