一般來說,這並不重要,所以更簡單的選項member = value;
是首選。在某些情況下,局部變量可能不明確,您可以使用前綴進行限定,但更好的方法是完全避免混淆。
然而,有一些角落的情況下,它很重要。當使用虛擬功能的處理,使用合格的名稱(type::member
)禁用運行調度,並確保在type
水平最終置換器被稱爲:
struct base {
virtual int f() { return 1; }
};
struct derived : base {
virtual int f() { return 2; }
void g() {
std::cout << f() << "\n";
std::cout << derived::f() << "\n";
}
};
struct mostderived : derived {
virtual int f() { return 3; }
};
int main() {
mostderived d;
d.g(); // 3 2
}
當模板類和繼承處理,查找在執行兩個階段。在第一階段,必須解決非依賴名稱。非限定名稱是非依賴名稱,因此在某些情況下,您需要符合this->
或type::
,上述區別仍適用。額外的資格用於使依賴名稱:
template <typename T>
struct derived : T {
void g() {
// std::cout << f() << "\n"; // Error, cannot resolve f() [*]
this->f(); // Ok, pick final overrider at runtime
derived::f(); // Ok, pick overrider here: base::f()
}
};
struct base {
virtual int f() { return 1; }
};
struct mostderived : derived<base> {
virtual int f() { return 3; }
};
int main() {
mostderived d;
d.g(); // 3, 1
}
呃?函數的參數是'value' –
@EdHeal你是對的。但是,如果該參數的名稱已更改爲與成員變量相同的名稱,則這只是一個示例。這是罕見的,但可能的。 – andre
但這不在OP中。無論如何,當爲ESA工作時,我們用'm_'爲前綴成員變量。問題已解決 –