// declare a class with private variable 「int * _a」
// declare a function of this class, foo()
Void foo() {
int * _a; // 1. Does this re-declaration then make _a equal to an unknown value?
// 2. Does a go out of scope after foo() returns?
}
Q
C++可變範圍
1
A
回答
7
- 是否然後該再聲明使
_a
等於未知值?
不,這不是「重申聲明」。它是一個名爲_a
的局部變量的聲明。它是未初始化的。
它與類成員變量_a
沒有任何關係。在本地_a
的聲明之後,您不能使用_a
(因爲_a
指的是本地變量!)而不再訪問成員變量_a
,但可以使用this->_a
來引用它。
- 做了走出去的範圍後
foo()
回報?
是的。局部變量在其聲明範圍結束時超出範圍(這就是「超出範圍」的原因)。
1
這就是所謂的shadowing。 foo()
的本地指針_a
給同名的成員指針造成陰影。由於foo()
是該類的成員,因此對_a
的任何引用都將解析爲本地指針。而且,由於任何範圍變量,這個指針在超出範圍時會自動銷燬它自己。不用說,成員指針將保持活着,只要其擁有的實例處於活動狀態。
要訪問成員數據,您必須說this->_a
。
相關問題
- 1. C++可變可視範圍和strems
- 2. c變量範圍
- 3. C++變量範圍
- 4. JavaScript可變範圍
- 5. Javascript可變範圍
- 6. Java - 可變範圍
- 7. Javascript可變範圍
- 8. 讓可變範圍
- 9. 範圍的可變
- 10. Bash可變範圍
- 11. λ可變範圍
- 12. Javascript可變範圍
- 13. 角$範圍可變
- 14. AJAX可變範圍
- 15. 可變範圍外
- 16. 索引超出範圍(範圍可變)
- 17. 多個C++文件和可變範圍
- 18. C#中可變範圍的混淆#
- 19. Python範圍可變vs不可變
- 20. 變量範圍在C++
- 21. C++類變量範圍
- 22. C++的變量範圍
- 23. 變量範圍在C#
- 24. Unity3D C# - 範圍的變量
- 25. C#中的變量範圍
- 26. C++變量範圍錯誤
- 27. MooTools/JavaScript可變範圍
- 28. 複製可變範圍
- 29. Javascript可變範圍問題
- 30. ruby可變範圍跨類
你的意思是'void'? – 2010-11-05 22:30:34
你的意思是'Klass :: foo()'? – wilhelmtell 2010-11-05 22:31:57
請張貼至少需要編譯的代碼。正如所寫,不僅代碼被破壞,而且foo不是任何類的成員函數。 – catphive 2010-11-05 22:33:25