Tôi gặp sự cố khi khởi tạo lớp có hằng số:gặp sự cố với constexpr
Tại sao khởi tạo con trỏ đến thành viên trong cùng một lớp dẫn đến lỗi? Lỗi xuất hiện mà không sử dụng lớp "Sử dụng"!
class A
{
private:
int a;
const int* const aptr;
public:
constexpr A(int _a):
a(_a)
, aptr(&a) // why aptr could not be initialized?
{}
};
class Data { } d1;
class B
{
private:
Data* dptr1;
public:
constexpr B(Data* _p): dptr1(_p) {}
};
class Use
{
static constexpr A a{2}; // fail! error: field initializer is not constant
static constexpr B b{&d1}; // works
};
@Morwenn: Vào thời điểm 'aptr' đang được xây dựng,' a' đã được tạo và có địa chỉ hợp lệ. – Mankarse
Tôi bạn khởi tạo 'A' và' B' outisde của 'Use' với g ++, bạn nhận được' xin lỗi, unimplemented: sử dụng giá trị của đối tượng đang được xây dựng trong một biểu thức liên tục'. – Morwenn
Tôi nghĩ rằng bạn có lỗi đánh máy hoặc UB ở đây: Bạn đang lấy địa chỉ của một tham số hàm, không tồn tại nữa sau khi hàm ctor của 'A' đã kết thúc. Có lẽ bạn muốn 'constexpr A (int & _a)'? – dyp