Tôi đã luôn luôn là một cậu bé ngoan khi viết các lớp học của tôi, tiền tố tất cả các biến thành viên với m_:C++ Constructor danh sách khởi lạ
class Test {
int m_int1;
int m_int2;
public:
Test(int int1, int int2) : m_int1(int1), m_int2(int2) {}
};
int main() {
Test t(10, 20); // Just an example
}
Tuy nhiên, thời gian gần đây tôi quên để làm điều đó và kết thúc bằng văn bản:
class Test {
int int1;
int int2;
public:
// Very questionable, but of course I meant to assign ::int1 to this->int1!
Test(int int1, int int2) : int1(int1), int2(int2) {}
};
Tin hay không, mã được biên dịch không có lỗi/cảnh báo và các bài tập đã diễn ra chính xác! Đó là chỉ khi làm kiểm tra cuối cùng trước khi kiểm tra trong mã của tôi khi tôi nhận ra những gì tôi đã làm.
Câu hỏi của tôi là: tại sao mã của tôi biên dịch? Là một cái gì đó như vậy cho phép trong tiêu chuẩn C + +, hoặc là nó chỉ đơn giản là một trường hợp của trình biên dịch được thông minh? Trong trường hợp bạn đang tự hỏi, tôi đã sử dụng Visual Studio 2008
Mang tên của bạn khó có thể coi là một "cậu bé tốt". Như bạn đã phát hiện ra, nó thường không cần thiết, và trong những dịp hiếm hoi mà nó xảy ra, chúng ta có tiền tố 'this->' này. – jalf
Có lẽ một bản dupe, xem http://stackoverflow.com/questions/2227244/what-if-a-constructor-parameter-has-the-same-name-as-a-member-variable-in-c – Abhay
@jalf : Mặt khác, một số loại chỉ báo thành viên var có thể làm cho mã đọc dễ dàng hơn (tôi sử dụng dấu _ khi nó không phá vỡ quy ước hiện tại). –