Để mở rộng một chút về những gì Kyle nói:
Không gian tên là gì khác hơn là một cách cú pháp cho người sử dụng và trình biên dịch để đặt tên trong xô khác nhau. Chúng tồn tại để cho phép bạn sử dụng tên phổ biến và phù hợp hơn cho mọi thứ mà không phải lo lắng về xung đột với người khác. std::vector
là một loại khác với lớp toán học vector
. Họ có thể chia sẻ cùng một tên miễn là họ đang ở trong các không gian tên khác nhau.
Theo như trình biên dịch có liên quan, hàm trong không gian tên không khác với hàm ở bất kỳ nơi nào khác. Nó chỉ có một cái tên buồn cười. Thật vậy, các trình biên dịch được phép tự do làm những gì gọi là "mangling tên": khi trình biên dịch thấy std::vector<int>
, nó thực sự có thể chuyển đổi thành thứ gì đó như __std~~vector~t~~int32_t~~__
hoặc bất kỳ thứ gì. Thuật toán mangling được chọn để không có tên do người dùng định nghĩa trong không gian tên chung có thể khớp với tên được sử dụng bởi trình quản lý vùng tên. Vì vậy, tất cả các tên miền có phạm vi không gian tên đều tách biệt với các tên trong các không gian tên khác, thậm chí là tên toàn cầu.
Về cơ bản, bước đầu tiên trong quá trình biên dịch là hiệu quả loại bỏ các không gian tên. Do đó, các bước trình biên dịch sau này không có đầu mối gì mà không gian tên nào đó ở trong. Vì vậy, chúng không thể tạo mã từ nó. Và do đó, các không gian tên không thể có bất kỳ ảnh hưởng nào đến tốc độ thực thi của mã được biên dịch.
Thư mục ... không thể có thể vấn đề. Sau khi biên dịch, bạn nhận được một tệp thực thi, thư viện hoặc DLL. Nếu trình biên dịch đã từng thực hiện bất kỳ thế hệ mã nào dựa trên vị trí của tệp nguồn, bạn cũng nên tránh trình biên dịch đó như dịch hạch. Các nhà văn biên dịch sẽ phải trolling người dùng của họ để làm cho điều đó xảy ra.
Nguồn
2012-02-17 07:23:00
Rất thẳng về phía trước cảm ơn bạn :-) –
Không đúng 100% rằng không gian tên không ảnh hưởng đến hiệu suất. Sử dụng một không gian tên ẩn danh có thể cải thiện hiệu suất trong mã của bạn. Xem http://stackoverflow.com/a/25565298/351771 – xioxox