2013-06-24 32 views
6

Tôi là người mới sử dụng C++, cố gắng học ngôn ngữ song song khi tôi làm việc trên một dự án yêu cầu nó. Tôi đang sử dụng một thư viện nguồn mở khá phổ biến và ổn định để thực hiện rất nhiều việc nâng hạng nặng. Đọc qua nguồn, hướng dẫn và mẫu mã cho thư viện, tôi đã nhận thấy rằng họ luôn sử dụng tên đủ điều kiện khi khai báo các loại, thường kết quả là rất các dòng dài và dài với rất nhiều ::. Đây có phải là thực hành tốt nhất trong C++ không? Có cách nào khác để giải quyết vấn đề này không?Sử dụng tên đủ điều kiện trong C++

+0

[không gian tên google cho C++] (http://stackoverflow.com/questions/6955023/c - sử dụng std :: string "hoặc" using namespace std " – Huy

+0

Nếu không thấy mã được đề cập, điều này là không thể trả lời được. Nhưng một chuỗi dài các tên miền không gian tên '::' trước tên có lẽ là không đúng. –

+0

..... cũng không sai –

Trả lời

7

Họ có thể thấy dễ dàng hơn việc trả lời nhiều câu hỏi từ những người đã thử mã ví dụ và thấy nó không hoạt động, chỉ vì họ không "sử dụng" các không gian tên có liên quan.

Thực tiễn khác nhau - nếu bạn đang làm việc trên một dự án lớn với nhiều thư viện và xung đột tên khác nhau, bạn có thể chủ động sử dụng nhiều vòng loại không gian tên nhất quán để khi bạn thêm mã mới, bạn sẽ không phải đi và làm cho mã cũ rõ ràng hơn về những gì nó đang cố gắng sử dụng.

Về mặt phong cách, một số người thích biết chính xác những gì được đề cập đến có khả năng đào sâu hoặc tuân theo tính năng "đi khai báo" của IDE (nếu có), trong khi những người khác như concision và để xem trình độ không gian tên đầy đủ hơn các tham chiếu "ngoại lệ" đối với các không gian tên chưa được bao gồm - một góc nhìn theo ngữ cảnh hơn.

Cũng bình thường để tránh phải "sử dụng không gian tên xxx;" trong một tệp tiêu đề, vì mã máy khách bao gồm tiêu đề đó sẽ không thể tắt nó đi, và nội dung của không gian tên đó sẽ bị đổ vĩnh viễn vào "không gian tìm kiếm" mặc định của chúng. Vì vậy, nếu bạn đang xem mã trong tiêu đề thì đó là một lý do khiến chúng có thể rõ ràng hơn. Tương phản với điều đó, bạn có thể có "sử dụng không gian tên" bên trong một phạm vi như một cơ quan chức năng - ngay cả trong một tiêu đề - và nó sẽ không ảnh hưởng đến mã khác. Sử dụng không gian tên từ bên trong tệp triển khai mà bạn mong muốn là tệp cuối cùng trong một đơn vị dịch, biên dịch tới một thư viện hoặc đối tượng mà bạn sẽ liên kết đến tệp thực thi cuối cùng hoặc có thể là đơn vị dịch thực thi.

5

typedefs Đầu tiên:

typedef std::vector<MyTypeWithLongName>::const_iterator MyTypeIt; 
//use MyTypeIt from now on 

thứ hai "sử dụng"

using std::string; 
//use string instead of std::string from now on 

thứ ba "using namespace"

using namespace std; 
//Use all things from std-namespace without std:: in front (string, vector, sort etc.) 

Đối với hành nghề tốt nhất: Không sử dụng 'sử dụng' và 'sử dụng không gian tên' rất nhiều. Khi bạn phải sử dụng nó (đôi khi giữ mã sạch hơn) không bao giờ đặt nó trong tiêu đề nhưng trong tệp .cpp. Tôi có xu hướng sử dụng một trong những điều trên nếu tên gọi thực sự dài hoặc tôi phải sử dụng nhiều loại trong cùng một tệp.

+0

bạn thực sự thích typedefs hơn sử dụng? – aaronman

+0

Chỉ dành cho các loại stl. Những xu hướng này có chiều dài khá dài như trong ví dụ đầu tiên. Tôi chỉ muốn đếm các khả năng, không xếp hạng chúng – Marius

+2

Tôi làm. 'MyTypeIt' tốt hơn' const_iterator'. –

2

Nếu bạn đang viết thư viện của riêng mình, bạn chắc chắn sẽ sử dụng nhiều không gian tên, trong ứng dụng cốt lõi của bạn, nên có ít sử dụng hơn. Để làm điều gì đó như std::string thay vì bắt đầu bằng using namespace std; thì phiên bản đầu tiên sẽ tốt hơn vì có nhiều lỗi mô tả hơn và ít bị lỗi hơn

Các vấn đề liên quan