Câu hỏi rất đơn giản. Đây có phải là C++ 11 hợp lệ không?Trình khởi tạo thành viên không tĩnh từ một số khác
struct Foo {
int bar = 1;
int baz = bar;
};
GCC (4.7.2) và Clang (3.1) đều chấp nhận nó với các thiết lập pedantic:
-std=c++11 -Wall -W -pedantic
Intel C++ (13.0.1.117) thì không. Nó barks tại int baz = bar;
với:
error: a nonstatic member reference must be relative to a specific object
Ai là đúng?
Trong trường hợp bạn tự hỏi, tôi sử dụng này cho mã như thế này, nơi mà nó mang mã khởi xích lại gần nhau, thay vì di chuyển các dòng cuối cùng vào constructor:
uint8_t colorR = -1;
uint8_t colorG = -1;
uint8_t colorB = -1;
uint8_t colorA = -1;
GLubyte RGBAVec[4] = {colorR, colorG, colorB, colorA};
Cảm ơn. Điều đó có vẻ dứt khoát. Mặc dù những gì có nghĩa là với "hoặc của một lớp học có nguồn gốc từ lớp đó"? Làm thế nào là nó có thể khởi tạo một thành viên với một thành viên của một lớp dẫn xuất? Lớp dẫn xuất chưa được khai báo, do đó không thể truy cập nó. –
@Nikos C. "hoặc của một lớp học có nguồn gốc từ lớp đó" đề cập đến "một bộ khởi tạo dấu ngoặc đơn hoặc bằng nhau" có nghĩa là trình khởi tạo là lớp đang ở trong lớp được bảo tồn. Về cơ bản tôi nghĩ rằng nó có nghĩa là bạn có thể khởi tạo các thành viên dữ liệu không tĩnh với thành viên dữ liệu không tĩnh của các lớp cha mẹ của bạn. Đó là cách khác xung quanh bạn hiểu nó, điều này có ý nghĩa hơn nhiều :) – Drax