Cả hai override specifier và final specifier đã được thêm vào C++ 11. Họ khác với specifiers khác thêm vào C++ 11 như constexpr và decltype, ở chỗ chúng không keywords và như vậy là có sẵn để sử dụng như định danh:Tại sao ghi đè và nhận dạng cuối cùng có ý nghĩa đặc biệt thay vì từ khóa được đặt trước?
int main()
{
int override = 0 ; // Ok
int final = 0 ; // Ok
//int constexpr = 0 ; // Error
}
Họ được gọi là định danh với ý nghĩa đặc biệt , được bao phủ trong dự thảo C++ 11 phần chuẩn 2.11
[lex.name] (nhấn mạnh tôi):
các định danh trong T có thể 3 có ý nghĩa đặc biệt khi xuất hiện trong một ngữ cảnh nhất định. Khi được nhắc đến trong ngữ pháp, các số nhận dạng này được sử dụng rõ ràng hơn là sử dụng mã định danh ngữ pháp. bất kỳ sự mơ hồ nào về việc liệu số nhận dạng đã cho có một ý nghĩa đặc biệt nào được giải quyết để diễn giải mã thông báo dưới dạng số nhận dạng thông thường hay không.
và Bảng 3 - định danh với ý nghĩa đặc biệt danh sách cả override và thức.
Tại sao hai specifiers những kết thúc được định danh với ý nghĩa đặc biệt thay vì từ khóa?
Tôi nghĩ bạn [đã thiết lập trước] (https://stackoverflow.com/questions/30311551/is-it-undefined-behavior-to-redefine-an-identifier-with-special-meaning) rằng đó là hành vi không xác định để xác định lại định danh với ý nghĩa đặc biệt? – CoryKramer
@CoryKramer Đó là cho '# define'. Mặc dù @Shafik có thể muốn làm rõ câu hỏi đó một chút. –
@CoryKramer đó là khác nhau, bạn có thể không '# define' hoặc' # undef' –