Nó là khá gây phiền nhiễu để nhận được một lỗi biên dịch rằng không có như vậy không gian tên như std ... Trình biên dịch suy nghĩ là gì? Tất nhiên nó tồn tại!
Vâng vâng, nhưng như với các tính năng thư viện, nó phải được khai báo trước tiên. Đó là những gì dòng đầu tiên đang làm.
Với việc đổi tên __std_alias, nó cho phép họ cung cấp bí danh mới cho không gian tên. Bạn có thể quyết định làm điều này trong mã của riêng bạn một ngày nào đó.
Có lẽ bạn muốn sử dụng shared_ptr trong mã của bạn nhưng không muốn dành mã của bạn để sử dụng tăng không gian tên hoặc tiêu chuẩn. Vì vậy, bạn có thể tạo một bí danh, và "điểm" nó tại một trong hai tăng hoặc std. Cùng với các tính năng khác có trong thư viện tăng cường mà sau này trở thành tiêu chuẩn.
Điều này không buộc bạn sử dụng không gian tên này cho mọi thứ vì bạn có thể có nhiều hơn một bí danh và bạn có thể có nhiều hơn một dấu trỏ đến cùng một không gian tên thực.
Giả sử chúng tôi muốn gọi thư viện con trỏ thông minh của chúng tôi là sml. Chúng ta có thể làm
namespace sml = boost; // or std
ở một nơi trong các mã và #include <boost/shared_ptr.hpp>
từ thời điểm đó trong mã (cùng một tiêu đề).
Ở mọi nơi khác trong mã của chúng tôi, chúng tôi sử dụng sml::shared_ptr
. Nếu chúng ta chuyển từ tăng sang std, chỉ cần thay đổi một tiêu đề, không phải tất cả mã của bạn.
'không gian tên std {}' sẽ không hủy bỏ 'std', nó sẽ không thêm gì vào nó :) Và, tất nhiên, đưa tên vào phạm vi. –
Ok do đó, nó chỉ để đưa nó vào phạm vi của tệp và nội dung của không gian tên vẫn giữ nguyên. Niềng răng '{}' chỉ có ở đó. Chúng không thêm bất cứ thứ gì vào không gian tên và cũng không lấy đi bất cứ thứ gì. Cảm ơn! – Nav