xem xét mã C++ sau:Làm thế nào để khởi tạo biến thành viên tham chiếu của một lớp?
#include<iostream>
using namespace std;
class Test {
int &t;
public:
Test (int &x) { t = x; }
int getT() { return t; }
};
int main()
{
int x = 20;
Test t1(x);
cout << t1.getT() << " ";
x = 30;
cout << t1.getT() << endl;
return 0;
}
Nó được thể hiện lỗi sau khi sử dụng trình biên dịch gcc
est.cpp: In constructor ‘Test::Test(int&)’:
est.cpp:8:5: error: uninitialized reference member ‘Test::t’ [-fpermissive]
Tại sao không trình biên dịch trực tiếp gọi Constructor?
Trong khi câu trả lời giải thích cách giải quyết vấn đề này, tôi muốn chỉ ra rằng vấn đề cơ bản là khởi tạo thực sự xảy ra _before_ phần thân của hàm tạo được nhập, để đảm bảo tất cả các thành viên đang ở trạng thái hợp lệ trước khi được sử dụng. Vì tài liệu tham khảo ** phải ** được khởi tạo, và không thể được "nhắm mục tiêu lại" sau khi khởi tạo, chúng cần phải được trỏ đến một biến thực tế trước khi phần thân của hàm tạo được nhập vào. –