Tôi đồng ý với những người khác - đó là yêu cầu đụng độ tên, sự mơ hồ và sau đó thực tế là nó ít rõ ràng hơn. Trong khi tôi có thể thấy việc sử dụng using
, sở thích cá nhân của tôi là hạn chế nó. Tôi cũng sẽ xem xét mạnh mẽ những gì một số người khác chỉ ra:
Nếu bạn muốn tìm một tên hàm có thể là một tên khá phổ biến, nhưng bạn chỉ muốn tìm nó trong std
không gian tên (hoặc ngược lại - bạn muốn thay đổi tất cả các cuộc gọi không nằm trong không gian tên std
, không gian tên X
, ...), Sau đó, làm thế nào để bạn đề xuất để làm điều này?
Bạn có thể viết một chương trình để thực hiện nó, nhưng sẽ tốt hơn nếu dành thời gian làm việc cho chính dự án của bạn hơn là viết một chương trình để duy trì dự án của bạn?
Cá nhân, tôi thực sự không bận tâm đến std::
tiền tố. Tôi thích cái nhìn hơn là không có nó. Tôi không biết đó có phải là vì nó rõ ràng và nói với tôi "đây không phải là mã của tôi ... Tôi đang sử dụng thư viện tiêu chuẩn" hoặc nếu đó là một cái gì đó khác, nhưng tôi nghĩ nó trông đẹp hơn. Điều này có thể kỳ lạ khi tôi chỉ mới vào C ++ (đã sử dụng và vẫn sử dụng C và các ngôn ngữ khác lâu hơn nữa và C là ngôn ngữ yêu thích của tôi mọi thời đại, ngay trên phần lắp ráp).
Có một điều khác mặc dù nó có phần liên quan đến những điều trên và những gì người khác chỉ ra. Mặc dù điều này có thể là thông lệ xấu, đôi khi tôi dành std::name
cho phiên bản thư viện tiêu chuẩn và tên để triển khai cụ thể theo chương trình. Vâng, thực sự điều này có thể cắn bạn và cắn bạn mạnh mẽ, nhưng tất cả là do tôi đã bắt đầu dự án này từ đầu, và tôi là lập trình viên duy nhất cho nó. Ví dụ: Tôi quá tải std::string
và gọi nó string
. Tôi có bổ sung hữu ích. Tôi đã làm điều đó một phần vì xu hướng C và Unix (+ Linux) của tôi đối với các tên viết thường.
Bên cạnh đó, bạn có thể có các bí danh không gian tên. Dưới đây là một ví dụ về nơi hữu ích mà có thể không được đề cập đến. Tôi sử dụng tiêu chuẩn C ++ 11 và đặc biệt với libstdc ++. Vâng, nó không có std::regex
hỗ trợ đầy đủ . Chắc chắn, nó biên dịch, nhưng nó ném một ngoại lệ dọc theo dòng của nó là một lỗi ở phần cuối của lập trình viên. Nhưng nó thiếu thực hiện.
Vì vậy, đây là cách tôi giải quyết nó. Cài đặt regex của Boost và liên kết nó. Sau đó, tôi làm như sau để khi libstdc ++ thực hiện hoàn toàn, tôi chỉ cần xóa khối này và mã vẫn giữ nguyên:
namespace std
{
using boost::regex;
using boost::regex_error;
using boost::regex_replace;
using boost::regex_search;
using boost::regex_match;
using boost::smatch;
namespace regex_constants = boost::regex_constants;
}
Tôi sẽ không tranh luận về việc đó có phải là một ý tưởng tồi hay không. Tuy nhiên, tôi sẽ lập luận rằng nó giữ sạch cho dự án của tôi và đồng thời làm cho nó cụ thể: Đúng, tôi phải sử dụng Boost, nhưng tôi đang sử dụng nó như libstdc ++ cuối cùng sẽ có nó. Có, bắt đầu dự án của riêng bạn và bắt đầu với một tiêu chuẩn (...) ngay từ đầu đã đi một chặng đường rất dài với việc giúp bảo trì, phát triển và mọi thứ liên quan đến dự án!
Chỉ cần làm rõ điều gì đó: Tôi thực sự không nghĩ rằng nên sử dụng tên của một lớp / bất cứ điều gì trong STL một cách có chủ ý và cụ thể hơn thay cho. Chuỗi là ngoại lệ (bỏ qua lần đầu tiên, ở trên hoặc thứ hai ở đây, chơi chữ nếu bạn phải) đối với tôi vì tôi không thích ý tưởng về 'Chuỗi'.
Như vậy, tôi vẫn rất thiên về C và thiên vị so với C ++. Chi tiết tiết kiệm, phần lớn những gì tôi làm việc phù hợp với C nhiều hơn (nhưng đó là một bài tập tốt và là cách tốt để khiến bản thân tôi học một ngôn ngữ khác và b. Cố gắng không bị thiên vị so với đối tượng / lớp / v.v. như ít khép kín, ít kiêu ngạo và chấp nhận nhiều hơn.). Nhưng những gì là hữu ích là những gì một số đã đề nghị: Tôi thực sự sử dụng danh sách (đó là khá chung chung, là nó không?), Và sắp xếp (điều tương tự) để đặt tên hai có thể gây ra một cuộc đụng độ tên nếu tôi được làm using namespace std;
, và do đó Cuối cùng, tôi thích cụ thể hơn, kiểm soát và biết rằng nếu tôi dự định đó là sử dụng tiêu chuẩn thì tôi sẽ phải chỉ định nó. Nói một cách đơn giản: không cho phép giả định.
Và như để làm phần regex của Boost std
. Tôi làm điều đó để hội nhập trong tương lai và - một lần nữa, tôi thừa nhận hoàn toàn đây là sự thiên vị - tôi không nghĩ nó xấu như vậy boost::regex:: ...
. Thật vậy, đó là một điều khác cho tôi. Có nhiều điều trong C ++ mà tôi vẫn chưa chấp nhận hoàn toàn về ngoại hình và phương thức (một ví dụ khác: các mẫu matrixdic so với var argument [mặc dù tôi thừa nhận các mẫu matrixdic rất rất hữu ích!]). Ngay cả những điều mà tôi chấp nhận nó cũng khó khăn và tôi vẫn có vấn đề với họ.