2013-03-17 15 views

Trả lời

2

Nó chỉ ảnh hưởng đến tên mangling để khả năng hiển thị bên ngoài rõ ràng đối với các ứng dụng khác.

+0

Nhưng chúng vẫn có thể bị quá tải không? Hay họ có thể trả về các đối tượng C++? –

+1

Có và có. chỉ cần thử ... –

+0

@ H2CO3 - chúng sẽ không bị quá tải, ví dụ: Tôi sẽ làm quá tải bằng tay, nhưng điểm về việc trả về các đối tượng C++ sẽ được áp dụng. – dtech

0

Bạn không nên ném ngoại lệ từ chúng, nhưng nếu không, bạn có thể triển khai hàm extern "C" với nhiều tính năng C++ tùy thích.

Đây là hoàn toàn tốt đẹp:

MyObject myobj; 
extern "C" { 
    int myfunc(char *c) 
    { // c++ features used here 
     std::string s = myobj.method(.... 
    } 
} 
+0

Điều gì về các ngoại lệ đang được xử lý bởi khung tôi sử dụng - Qt? – dtech

+1

Các ngoại lệ không nên vượt qua ranh giới 'extern" C "', vì bạn không thể chắc chắn người gọi có thể xử lý chúng, hoặc thậm chí nếu người gọi được viết bằng C++. – NovaDenizen

1

extern "C" không không nghĩa biên dịch dưới dạng mã C. Nó có nghĩa là chỉ rằng hàm cần được biên dịch sao cho nó có thể được gọi từ mã C; những gì thực sự ảnh hưởng đến phụ thuộc vào việc triển khai thực hiện. Bất cứ điều gì bạn có thể làm trong C++ đều tốt bên trong một hàm như vậy, bao gồm cả ném ngoại lệ.

+0

Tôi nhận ra nó hơi trễ một chút, nhưng về mẫu thì sao? Họ không thể làm việc bên trong một tờ khai extern, vì nó cấm tên mangling? – dtech

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