2010-02-03 34 views
8

Có điều gì giống như phôi an toàn của C++ trong Mục tiêu-C không?Đúc an toàn trong mục tiêu C

Tôi biết rằng họ đang ở trong mục tiêu C++, nhưng tôi không chắc chắn về các tác dụng phụ có thể xảy ra. Sử dụng Objective C++ có thể làm chậm thời gian biên dịch - có bất kỳ lý do nào khác không sử dụng nó không?

+0

lỗi là gì, và các diễn viên là gì? Nếu dàn diễn viên đang truyền một đối tượng sang một loại khác (tức là từ 'id' sang' NSString * '), nó có thể ảnh hưởng đến cách trình biên dịch chọn bộ chọn nào sẽ sử dụng nếu có nhiều bộ chọn có chữ ký khác nhau. – dreamlax

+2

Bạn không thể sử dụng 'dynamic_cast' trong trường hợp này (đích không phải là con trỏ hoặc tham chiếu đến ** class **). Sử dụng 'static_cast' để thay thế. – kennytm

+0

@KennyTM: Cảm ơn, đã sửa nó ngay bây giờ – Casebash

Trả lời

9

Mục tiêu-c có các phôi an toàn C++. Ngoài ra, chúng ta có thể sử dụng phản ánh thời gian chạy:

id myOb=[someObject getObject]; 
NSAssert([myOb isKindOfClass:[MyClass class]], @"Return value is not of type MyClass as expected."); 
MyClass * newOb= (MyClass *)myOb; 

Tài liệu tham khảo:

Cocoa with Love:

+5

Đúc id myObj vào MyClass * là không cần thiết. Id có thể được gán tự do cho các biến của bất kỳ loại đối tượng nào. – christosc

+0

"Mục tiêu-c có C++ an toàn phôi". Ý anh là gì? ví dụ. dynamic_cast hay như vậy? Nó không biên dịch. Cảm ơn – sergtk

-1

Tính năng nào của C++ bạn nghĩ sẽ giúp bạn đúc một số64 bit đến 322 bit int?

+0

Trong nhiều triển khai trình biên dịch 'long' là 32-bit ngay cả trên mục tiêu 64 bit. Và 'long long' là 64 bit. – kennytm

+1

Không có trong Unix hoặc OS X. Trình biên dịch sẽ cho bạn một cảnh báo tốt về điều đó. – Darren

+0

Điều này phải là một bình luận - không phải là một câu trả lời. Việc đúc là một sai lầm - Tôi tin rằng tôi sẽ nhận được một cảnh báo nếu tôi đang sử dụng một C++ cast – Casebash

0

Bạn có thể bật cờ trình biên dịch để cảnh báo bạn trong các trường hợp như thế này. Lỗi cụ thể này sẽ bị bắt bởi cờ -Wconversion.

+0

-Wconversion dường như bỏ sót lỗi và tăng nhiều lỗi giả mạo – Casebash