Lưu ý: câu hỏi này là về name space
, không phảinamespace
.
Tiêu chuẩn C ++ có một số tài liệu tham khảo name space
, nhưng tôi không thấy định nghĩa về điều này. Các tiêu chuẩn nói rằng các nhãn và macro nằm trong các không gian tên khác nhau. Tất cả các tham chiếu khác name space
nằm trong phần tương thích C / C ++, như thế này ( bản nháp hiện tại ):
Đây là một trong số ít sự không tương thích giữa C và C ++ có thể được quy cho định nghĩa không gian tên C ++ mới trong đó một tên có thể được khai báo là một loại và là một loại không trong một phạm vi duy nhất làm cho tên không loại này ẩn tên loại và yêu cầu rằng các từ khóa lớp, struct, union hoặc enum được sử dụng để chỉ tên loại. Định nghĩa không gian tên mới này cung cấp các tiện ích công chứng quan trọng cho các lập trình viên C ++ và giúp sử dụng các kiểu do người dùng định nghĩa giống như có thể với việc sử dụng các kiểu cơ bản.
Định nghĩa không gian tên mới này là gì? Tôi có thể tìm thấy nó trong tiêu chuẩn ở đâu? Các quy tắc chính xác là gì? Các quy tắc dường như phức tạp hơn so với "các loại ẩn không loại". Giống như, điều này không biên dịch:
typedef int Foo; // Foo is a type
void Foo(); // not a type, but compile error, instead of hiding
Nhưng điều này không:
struct Foo { }; // Foo is a type as well
void Foo(); // This hides the type Foo. "struct Foo" refers to the type
Và điều này cũng không được biên dịch:
struct Foo { }; // Type
namespace Foo { } // Non-type, but compiler error instead of hiding
[stmt.label]/1
và một cho macro [cpp]/8
.