我在想,如果這個 - >應使用兩種:何時應該使用?
void SomeClass::someFunc(int powder)
{
this->powder = powder;
}
//and
void SomeClass::someFunc(bool enabled)
{
this->isEnabled = enabled;
}
我想知道如果是後者必須是正確的,或者的IsEnabled =啓用就足夠了。
感謝
我在想,如果這個 - >應使用兩種:何時應該使用?
void SomeClass::someFunc(int powder)
{
this->powder = powder;
}
//and
void SomeClass::someFunc(bool enabled)
{
this->isEnabled = enabled;
}
我想知道如果是後者必須是正確的,或者的IsEnabled =啓用就足夠了。
感謝
this->
當直接使用該成員時將是不明確的。這可能發生在模板代碼中。
考慮一下:
#include <iostream>
template <class T>
class Foo
{
public:
Foo() {}
protected:
void testing() { std::cout << ":D" << std::endl; }
};
template <class T>
class Bar : public Foo<T>
{
public:
void subtest() { testing(); }
};
int main()
{
Bar<int> bar;
bar.subtest();
}
這將調用自測試失敗()是依賴於模板參數。如果說,你指的是功能,您將不得不做this->testing();
或Foo<T>::testing();
錯誤消息:
temp.cpp: In member function ‘void Bar<T>::subtest()’:
temp.cpp:16:32: error: there are no arguments to ‘testing’ that depend on a template parameter, so a declaration of ‘testing’ must be available [-fpermissive]
temp.cpp:16:32: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
這不是因爲含糊不清,而是因爲從屬名稱的查找被延遲到實例化點。 – 2010-12-20 16:17:10
this
只是一個指向對象本身。它是爲了可讀性而製作的,以便您知道您正在引用對象函數或變量,而不是函數中的內容。
我不認爲有任何其他很好的理由除了可讀性:-)
,如果你想避免不明確的引用它也是良好的。假設你的函數中有一個全局變量和一個名稱相同的變量,那麼this->會引用全局變量。
在某些情況下,它有助於解決模糊問題(儘管可以說是可讀性問題)。 – Nate 2010-12-20 15:53:53
我認爲在C++中你忽略了this->
,但它可能是個人偏好。無論代碼還是沒有,代碼仍然會執行相同的操作。
我傾向於遵循大拇指的這個簡單的規則:
this
,如果它不是方法的參數,那麼它顯然是該類的一個屬性(並且我傾向於依靠命名約定來區分它們)this->
,區分自由站立功能類方法第二也帶來了一致性,因爲它可能在template
d代碼是必要的(我寫了不少了,尤其是我的寵物項目)。
這背後的基本原理很簡單:儘可能多地寫出明確的內容(即讓讀者的生活更容易),但不會是更多的針跡(這會變得混亂),它遵循聖安德魯的聖安德烈的方法:
達到了完美,而不是當沒有更多東西需要補充時,而是什麼時候沒有東西可以拿走。
爲什麼不直接繼續嘗試呢? .. this->只在存在歧義時才需要(例如,第一種情況,參數優先,但還有其他情況,如一些不明確的模板情況)。 – falstro 2010-12-20 15:50:28
我知道什麼可行,什麼不是我的意思哪一個是適當的OOP – jmasterx 2010-12-20 15:51:21
正確的OOP沒有評論這個問題。很像支架位置,它是編碼風格的問題。 – stonemetal 2010-12-20 15:52:58