簡體   English   中英

C++ 陰影變量名

[英]C++ shadowing variable name

如果 C++ 類成員函數訪問一個變量名,該變量名被定義為類的成員變量和成員函數定義的全局范圍內的變量,那么成員函數將實際訪問哪一個? 場景是這樣的:

SomeClass.h:

class   SomeClass
{
    int Num;
    void    OperateOnNum();
};

SomeClass.cpp:

#include "SomeClass.h"
int Num;
void    SomeClass::OperateOnNum()
{
    Num = 0;
}

OperateOnNum 將對哪個 Num 進行操作? Microsoft Visual Studio 2013 和 GCC(版本:gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2)都沒有發出警告。

類變量隱藏了全局變量。 如果要訪問全局變量,請執行以下操作:

void SomeClass::OperateOnNum()
{
    ::Num = 0;
}

沒有警告,因為這就是語言的工作方式。

您始終可以使用this和全局范圍解析來消除兩者之間的歧義

this->Num; // refers to the member Num
::Num;     // refers to the global Num

一個好的設計,不應該訴諸這樣的方法。 您可以相應地標記成員名稱和全局變量(它們本身就是“不要”):

_name;  // member name prefixed with _
m_name; // member name prefixed with m_
global_name; // global name - prefixed with global_

在這種情況下,類成員參數會影響全局變量。 因此,您可以在方法的范圍內看到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM