Điều này có vẻ một chút về phía sau với tôi nhưng nó hoạt động:Tại sao phạm vi tham số C++ ảnh hưởng đến chức năng tra cứu trong một vùng tên?
#include <iostream>
namespace nTest
{
struct cTest {};
void fTest(cTest& x)
{
std::cout << "nTest::fTest(cTest&) called" << std::endl;
}
}
int main(void)
{
nTest::cTest x;
fTest(x); //Weird! fTest is resolved since its parameter belongs to nTest.
return 0;
}
Thông thường, bạn sẽ cần nTest :: để truy cập fTest, nhưng thông số của nó mà thuộc về nTest dường như thêm nTest vào danh sách các thể phạm vi để tìm kiếm fTest. Có vẻ lạ với tôi rằng phạm vi tham số ảnh hưởng đến việc tra cứu hàm.
Điều này biên dịch tốt trong GCC, nhưng tôi tự hỏi là việc sử dụng di động này? Định nghĩa chính thức của cơ chế phạm vi này là gì?
ADL - Tra cứu phụ thuộc đối số (http://en.wikipedia.org/wiki/Argument-dependent_name_lookup) – Nim
Đồng thời đọc câu trả lời được chấp nhận [ở đây] (http://stackoverflow.com/questions/2958648/what-are -the-cạm bẫy-of-adl) –