[英]variable declared in member function is same as member variable
想知道這是否行得通,以及如何:
class sample
{
int i;
int func1()
{
int i = 0;
i++;
return i;
}
}
我問的原因是因為我有很多成員函數和錯誤的名稱約定。
當您說int i = 0
您正在創建一個名為i
的新變量,該變量將隱藏類成員。 如果要訪問類的i
,則可以執行this->i
。 但是通常最好不要一開始就造成這種混亂。
在func1
的主體內,您將引用本地聲明的int i
。 為了引用該類成員,您需要使用this
指針顯式引用它:
this->i
this
是一個const指針, this
指針傳遞給類中的所有方法以表示當前實例。 當然,當您具有static
成員函數時,不會傳遞它。
首先使用本地聲明的int i
的原因是因為它與i++
處於同一范圍,並return i
。
func1
內部的變量引用int i = 0;
(最接近i
)。
在C ++中,將首先從相同/相鄰范圍中使用相同的名稱變量。
工作正常。 函數內部對名稱i
所有使用均指該函數內部聲明的i
。 也就是說,該函數每次都會返回1。
您對func1()中的i的意圖是什么。 是否要增加外部i或函數內部的i。 如果您希望外部i增加,則將無法使用。
范圍變得奇怪了:
int func1()
{
int i = 0;
i++;
{ //1
int i = 41;
i++;
}
{ //2
int j = i + 1;
cout << j << endl // this prints 2
}
return i;
}
在范圍內使用變量的規則是,它始終總是首先引用最局部的范圍並逐步向上使用。 因此,在您的示例中,函數內的i
將不會引用類中的i
。
實際上,該返回將引用在func1()
聲明的i
。 這都是關於范圍的。
范圍以{
開頭,以}
結尾。 僅當您在范圍內或進入另一個范圍時,才定義在范圍內聲明的所有變量。 因此
{ int i = 0; { int i = 1; { int i = 2; }}}
完全有可能。 如果您在范圍之一中使用i
,則將始終在同一范圍中引用i
。 引用范圍更大的i
更加困難。
在您的示例中,您仍然可以使用this->i
來引用頂部i
, this
是您正在使用的對象的指針。 這是一些更多信息(向下滾動)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.