Tiêu chuẩn C ++ yêu cầu một định nghĩa cho thành viên const tĩnh của bạn nếu định nghĩa đó là cần thiết.
Định nghĩa là bắt buộc, ví dụ nếu địa chỉ của nó được sử dụng. push_back
lấy tham số của nó bằng tham chiếu const, và vì vậy, trình biên dịch cần địa chỉ của thành viên của bạn và bạn cần xác định nó trong không gian tên.
Khi bạn sử dụng hằng số một cách rõ ràng, bạn đang tạo tạm thời và đây là tạm thời ràng buộc với tham chiếu (theo các quy tắc đặc biệt trong tiêu chuẩn).
Đây là một trường hợp thực sự thú vị và tôi thực sự nghĩ rằng đáng để nêu ra một vấn đề để std được thay đổi để có hành vi tương tự cho thành viên liên tục của bạn!
Mặc dù, theo một cách kỳ lạ, điều này có thể được coi là một cách sử dụng hợp pháp của toán tử '+' đơn nhất. Về cơ bản, kết quả của giá trị unary +
là một giá trị và do đó, các quy tắc ràng buộc giá trị với tham chiếu const được áp dụng và chúng tôi không sử dụng địa chỉ của thành viên const tĩnh:
v.push_back( +Foo::MEMBER );