Tôi có một đoạn mã nhỏ ở đây để xem xét của bạn mà câu đố tôi khá nhiều. Điều kỳ lạ là nó biên dịch trên cả Sun Studio và GCC mặc dù tôi nghĩ nó không nên.Các hàm có đối số lớp bị rò rỉ từ không gian tên?
Hãy xem xét điều này:
namespace name
{
class C
{
int a;
};
void f(C c);
void g(int a);
}
int main(int argc, char** argv)
{
name::C c;
name::f(c);
f(c); // <--- this compiles, strangely enough
name::g(42);
// g(42); <--- this does not, as I expected
}
Đối số lớp từ không gian tên tương tự gây nên các chức năng f
để 'rò rỉ' ra khỏi không gian tên và có thể truy cập mà không name::
.
Có ai có lời giải thích cho điều này không? Nó chắc chắn là tôi và không phải trình biên dịch là sai ở đây.
Thú vị, trình biên dịch intel BTW (icpc) cũng biên dịch ... – Artyom
Đã chỉnh sửa câu hỏi của riêng tôi để xóa các bit không thích hợp và giúp tìm kiếm dễ dàng hơn cho những người khác có cùng vấn đề. – lytenyn