2011-01-27 35 views

Trả lời

12

Bởi "tệp triển khai chức năng", bạn có nghĩa là tệp .h hoặc tệp .cpp không? (Tôi thường gọi các tập tin .cpp "thực hiện", trong khi các tập tin .h là các tập tin "giao diện".)

Nếu bạn muốn nói, tập tin .cpp, thì dĩ nhiên. Đó là nơi bạn thường thấy using namespace std. Nó có nghĩa là tất cả các mã trong tập tin .cpp này có quyền truy cập vào std mà không có trình độ chuyên môn.

Nếu bạn ngụ ý tệp .h, thì bạn có thể, nhưng bạn không nên. Nếu bạn đưa nó vào tệp .h, nó sẽ tự động áp dụng cho bất kỳ tệp .cpp nào bao gồm tệp .h, có thể là nhiều tệp. Nói chung, bạn không muốn nói các mô-đun khác không có tên để nhập. Tốt nhất là đặt nó vào mọi tệp .cpp thay vì trong tệp .h chung.

+0

Vâng, ý tôi là các tệp cpp. Tôi sử dụng namespace std trong file cpp chính và "std ::" trong file .cpp (không phải chức năng chính), vì vậy tôi chỉ tò mò về việc sử dụng namespace trong file cpp của hàm. – Sean

+2

@Sean: không có quy tắc đặc biệt nào cho tệp .cpp "chính". Chỉ có một số quy tắc về 'main' _function_ (chỉ có thể' int' etcetera) nhưng những quy tắc đó không có bất kỳ ảnh hưởng nào đến các hàm hoặc lớp khác xảy ra được định nghĩa trong cùng một tệp. – MSalters

4

nếu theo "tệp triển khai chức năng", bạn có nghĩa là tệp .C/.cpp, v.v., tuy nhiên bạn có thể cố gắng tránh. Thay vào đó, bạn chỉ cần tiêm <iostream> cho std::cout, std::endl v.v.

6

tôi giả sử bạn có nghĩa là một cái gì đó như thế này:

// Foo.h 

void SayHello(); 

...

// Foo.cpp 

#include "Foo.h" 

using namespace std; 

void SayHello() 
{ 
    cout << "Hello, world!" << endl; 
} 

Nếu đó là trường hợp, sau đó có. Tuy nhiên, nó được coi là thực tế xấu để sử dụng using namespace std; trong các dự án lớn hơn.

+1

Tôi muốn tránh sử dụng "sử dụng không gian tên" ngay cả trong các tệp triển khai, nếu sau này bạn muốn sử dụng một đơn vị dịch duy nhất, bạn sẽ nhận được xung đột tên. – GameDeveloper

70

Có thể bạn cũng muốn biết rằng bạn cũng có thể đặt using namespace std; trong cơ thể chức năng như dưới đây. Điều này sẽ hạn chế phạm vi của câu lệnh using namespace.

void f() { 
    using namespace std; 
    cout << "Foo" << endl; 
    //.. 
}; 

void g() { 
    cout << "Bar" << endl; //ERROR: cout and endl are not declared in this scope. 
}; 

Điều này có thể hữu ích nếu bạn muốn sử dụng rất nhiều yếu tố của một namespace trong cơ thể của một hàm được viết trong một tập tin tiêu đề (mà bạn không nên cho mỗi gia nhập, nhưng đôi khi nó là OK hoặc thậm chí gần như cần thiết (ví dụ như các mẫu)).

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