struct POD { int i, j; };
class A {
POD m_pod;
public:
A() : m_pod({1,2}) {} // error
A() : m_pod(static_cast<POD>({1,2})) {} // error
A() : m_pod((POD) {1,2}) {} // ok!
};
Tôi thấy điều này trong mã sản xuất cũ được biên dịch với g++34
, cho đến lúc đó tôi không biết tính năng này.
Đây có phải là tính năng cụ thể của g++ không? Nếu không thì, tại sao typecasting cần thiết và đó là quá chỉ cast kiểu C được cho phép?Tại sao việc tạo kiểu chữ kiểu C là bắt buộc trong khi khởi tạo dữ liệu POD trong danh sách khởi tạo?
tôi đoán là '{1,2} 'không phải là một loại POD và một' reinterpret_cast' đang xảy ra. –