Tại sao có hiệu suất truy cập? Chúng thực hiện chính xác cùng chức năng như C phôi. Điểm khác biệt duy nhất là chúng thu được nhiều lỗi hơn vào thời gian biên dịch và chúng dễ tìm kiếm hơn trong mã nguồn của bạn.
static_cast<float>(3)
chính xác tương đương với (float)3
và sẽ tạo chính xác cùng một mã.
Cho một số float f = 42.0f
reinterpret_cast<int*>(&f)
tương đương chính xác với (int*)&f
và sẽ tạo chính xác cùng một mã.
Và cứ tiếp tục như vậy. Dàn diễn viên duy nhất khác biệt là dynamic_cast
, mà, vâng, có thể ném một ngoại lệ. Nhưng đó là bởi vì nó làm những việc mà dàn diễn viên kiểu C không thể làm được. Vì vậy, không sử dụng dynamic_cast
trừ khi bạn cần chức năng của nó.
Nó thường là an toàn để giả định rằng các nhà văn biên dịch là thông minh. Với hai biểu thức khác nhau có cùng ngữ nghĩa theo tiêu chuẩn, thường là an toàn để giả định rằng chúng sẽ được thực hiện giống hệt nhau trong trình biên dịch.
Rất tiếc: Ví dụ thứ hai nên được reinterpret_cast chứ không phải dynamic_cast, tất nhiên. Sửa lỗi ngay bây giờ.
Ok, chỉ để làm cho nó hoàn toàn rõ ràng, đây là những gì chuẩn C++ nói:
§5.4.5:
Quá trình chuyển đổi được thực hiện bởi
- một
const_cast
(5.2 .11)
- a
static_cast
(5.2.9)
- a.210 theo sau là một
const_cast
- một
reinterpret_cast
(5.2.10), hoặc
- một
reinterpret_cast
theo sau là một const_cast
.
có thể được thực hiện bằng cách sử dụng ký hiệu ký hiệu chuyển đổi loại rõ ràng. Các hạn chế giống nhau về ngữ nghĩa và áp dụng các hành vi . Nếu chuyển đổi có thể được giải thích ở nhiều hơn một trong số cách được liệt kê ở trên, thì cách diễn giải xuất hiện đầu tiên trong danh sách là được sử dụng, ngay cả khi dàn diễn viên kết quả là .
Vì vậy, nếu bất cứ điều gì , kể từ khi các diễn viên C-phong cách được thực hiện trong điều khoản của C++ phôi, phôi C-style nên chậm. (Tất nhiên là không, bởi vì trình biên dịch tạo ra cùng một mã trong mọi trường hợp, nhưng nó hợp lý hơn so với các kiểu dáng C++-style đang chậm hơn.)
Tôi có thể phải thêm tiền thưởng vào tài khoản này ... đó là cách tôi quan tâm. –
Bạn đã có hai câu trả lời chính xác (nếu tôi nói như vậy). –
Các câu trả lời hiện tại ở đây chỉ ra rằng kiểu C++ static_cast không có hiệu suất thời gian chạy. Có ai đó xin vui lòng bình luận hoặc thêm một số lời giải thích là tại sao họ sẽ có cùng một hiệu suất? (Câu hỏi có mục đích mơ hồ.) –