我曾經看到過建議成員函數明確引用使用this->
的成員變量,以避免忘記聲明成員變量並意外引用全局變量。任何人都可以發表評論,如果他們認爲這是一個合理的預防措施或不必要的冗長,將無謂地複雜的代碼閱讀?有沒有人真的在日常的現實生活中編程?顯式成員函數中的this->`
回答
由於我經常實現類模板,我習慣總是使用this->
限定成員變量和成員函數。在類模板的情況下還有另外一個原因,它與this->
資格名稱很有用:不依賴於模板參數名稱僅在相位上查找我查找,即取決於模板參數名在基類從不看在基地。通過使用this->
來限定成員名稱,他們變得有依賴性。例如:
#include <iostream>
void f() { std::cout << "::f()\n"; }
template <typename T>
class base
{
public:
void f() { std::cout << "base::f()\n"; }
};
template <typename T>
class derived
: public base<T>
{
public:
void g() {
f();
this->f();
}
};
int main()
{
derived<int>().g();
}
我使用資格,在我的所有代碼,除非一些編碼規則禁止我這樣做this->
(我會考慮的編碼準則愚蠢和錯誤的這一方面)。當然,在我自己的代碼我有資格可以合格,所有的名字都沒有定製點(例如,我就沒有資格swap()
)。
嗯,不,因爲你通常不會使用經常使用的全局變量,因爲這些變量會引起衝突。此外,你可以隨時使用前綴表示成員變量:
class C {
int m_Foo;
int mBar;
};
使用這個真的可以炸掉的代碼大小和影響可讀性。考慮
class Foo {
int a, b, c, d;
int Bar() {
return (a + b + (b/c) + d * (c + a));
}
};
嘗試在上面的例子中添加this->
。
此外,每個優秀的編輯器都會根據其範圍對變量着色不同。
哪些編輯器按範圍着色?我正在使用VS2010,但它不這樣做。例如, – baruch
VS 2012。或者你可以得到VisualAssist插件。 –
雖然對於成員變量的一些約定是件好事,但我認爲this->
太冗長了,並且試圖解決一個難得的機會發生的問題。我使用m_var
或mVar
作爲成員變量。
它讓我想起了這種僞預防措施if (3 == var)
insend if (var == 3)
避免了if (var = 3)
的錯誤。現在的編譯器總是抓住。
可讀代碼計數。它可以防止錯誤。
+1,我總是想知道爲什麼一些老學校的C++編碼器用於寫'if(3 == var)'... –
我試圖用這種方式編寫它,但它只是......不合邏輯的?編譯器還警告這些表達式。 –
現在幾年來,我在這裏和那裏遇到這件事,而且還不習慣。 –
this->
經常被用來在IDE的
讀取
- 針對碼維護者參數的mixup可以有這些優點也通過與
m_
前綴前綴的成員更簡潔
- 1. 從成員struct的成員函數中訪問類的成員?
- 2. 非構造函數成員函數中的顯式字符串行爲
- 3. 函數中的類成員函數?
- 4. 成員函數
- 5. 成員函數
- 6. 傳遞成員函數作爲成員函數的參數
- 7. 非模板成員函數的顯式專業化不稱爲
- 8. 如何顯式調用成員函數的const版本?
- 9. 模板類成員函數的顯式特化
- 10. 靜態成員數組成員函數
- 11. 調用成員函數中
- 12. C++分配成員的目標函數,類成員函數
- 13. 使用其他成員函數的C++成員函數
- 14. 從不同的類成員函數調用成員函數
- 15. 用於重載成員函數的成員函數指針
- 16. 成員函數的訪問函數成員變量
- 17. 成員函數返回指向成員函數的指針
- 18. 在非類成員函數的參數中傳遞類成員函數
- 19. C++構造函數隱式成員
- 20. 成員函數行
- 21. 成員函數和
- 22. const成員函數
- 23. Constexpr成員函數
- 24. 在成員函數
- 25. 成員函數指針,傳遞函數作爲非成員函數的參數
- 26. 從成員函數模板參數調用成員函數
- 27. 使用成員模板函數顯式模板實例化
- 28. 作爲成員函數和非成員函數的運算符函數
- 29. 如何從另一個類的成員函數中訪問數據成員和成員函數?
- 30. 在構造函數初始化程序中使用成員的成員函數
IMO,這是一個瘋狂的想法,幾乎可以肯定做傷害了極大的可讀性所有的時間,以確保針對我(一)從來沒有見過一個問題(雖然我只寫了C++爲〜30歲,所以也許我只是沒有看到它*)*)。 –
@JerryCoffin C++第一次出現在'83,所以它很難在它的代碼30年; –
@BartekBanachewicz:Ooops - typo。這應該說「20年」。抱歉。 –