Thực tế, có hai lý do tại sao literals được đưa vào không gian tên:
- Nó được coi là không mong muốn mà người dùng sẽ sử dụng
using namespace std;
chỉ để có được giữ của literals tương ứng. Có các chữ được khai báo trong các không gian tên cụ thể cho các chữ cái này không gây ra vấn đề.
- Tùy thuộc vào miền có thể mong muốn sử dụng
s
làm hậu tố cho một mục khác. Đã có một hậu tố khác s
có nghĩa là giây nhưng chúng không thực sự xung đột.
Trong video of STL's CppCon 2014 talk (được đăng bởi remyable trong một chú thích) Stephan T. Lavavej giải thích thiết kế tổng thể của chữ trong C++ 14 và nó khá rõ ràng rằng họ là không nghĩa vụ phải được trong không gian tên toàn cầu ! Thay vào đó, hậu tố chữ trong thư viện chuẩn sống trong một hệ thống phân cấp của inline
không gian tên cho phép người dùng kiểm soát chi tiết hơn các chữ được tạo sẵn. Ví dụ, các hậu tố đen cho các chuỗi được khai báo như thế này (21,3 [string.classes] đoạn 1):
namespace std {
inline namespace literals {
inline namespace string_literals {
string operator"" s(char const* str, size_t len);
}
}
}
hệ thống cấp bậc này của inline
không gian tên làm cho nó có thể cho người sử dụng để có được những lựa chọn thích hợp của hậu tố đen:
using namespace std;
- bạn nhận được mọi thứ trong thư viện chuẩn C++, bao gồm hậu tố chữ, không có bất kỳ bằng cấp nào.
using namespace std::literals;
- bạn sẽ nhận được tất cả hậu tố được xác định trong thư viện chuẩn C++.
using namespace std::string_literals;
- bạn nhận được tất cả các hậu tố chữ áp dụng cho chuỗi.
using namespace std::literals::string_literals;
- có, bạn có thể làm điều đó nhưng bạn thực sự không nên: tương đương với using namespace std::string_literals;
.
Rõ ràng, ủy ban sẽ không cố gắng nhiều nếu nó đã xem xét ý tưởng có khả năng gây ô nhiễm không gian tên chung với hậu tố chữ, mặc dù chúng thậm chí không xung đột với bất kỳ hậu tố chữ nào của người dùng.
Nguồn
2014-12-18 22:09:07
Oh người đàn ông ... Tôi nhớ đã nhìn thấy một cuộc nói chuyện về điều này, hoặc là CppCon hoặc Boostcon, nhưng tôi không thể nhớ tại sao điều này. – Borgleader
Trong khi tôi không biết lý do chính xác, có vẻ hợp lý để tránh gây ô nhiễm không gian tên chung mà hậu tố ngắn như vậy. – Aleph
@Borgleader https://www.youtube.com/watch?v=dTeKf5Oek2c Đó là phần đầu video. –