Theo nguyên tắc chung, đó là một vấn đề các công ước địa phương. Hầu hết các địa điểm tôi đã xem không sử dụng this->
trừ khi cần, và đó là quy ước tôi thích, nhưng tôi đã nghe nói về những người thích sử dụng nó một cách có hệ thống.
Có hai trường hợp khi cần thiết. Đầu tiên là nếu bạn đã ẩn tên có cùng tên trong phạm vi địa phương; nếu ví dụ bạn có một thành viên có tên toto
và bạn cũng đã đặt tên đối số chức năng của mình toto
. Nhiều công ước mã hóa đánh dấu thành viên hoặc lập luận để tránh trường hợp này , ví dụ: tất cả tên thành viên bắt đầu bằng my
hoặc m_
hoặc tên thông số sẽ bắt đầu bằng the
.
Trường hợp còn lại là this->
có thể được sử dụng trong mẫu để đặt tên theo phụ thuộc . Điều này có liên quan nếu lớp mẫu kế thừa từ loại phụ thuộc và bạn muốn truy cập thành viên của cơ sở, ví dụ::
template <typename T>
class Toto : public T
{
public:
int f()
{
return this->g();
}
};
Nếu không có sự this->
đây, g()
sẽ là một tên không phụ thuộc, và trình biên dịch sẽ trông nó lên trong bối cảnh các mẫu định nghĩa, mà không cần dùng các lớp cơ sở xem xét.
Nguồn
2012-03-06 20:06:46
Cẩn thận: nếu 'vin' là một hàm ảo, thì' this-> vin() 'và' MyUtopicClass :: vin() 'là khác nhau. –
aschepler