Tôi không chắc về bảo đảm thực hiện cho toán tử bậc ba C/C++.
Ví dụ nếu tôi đưa ra một địa chỉ và một boolean mà nói nếu địa chỉ đó là tốt cho việc đọc tôi có thể dễ dàng tránh xấu nội dung đã sử dụng if/else:C++ điều kiện thực thi điều hành bậc ba
int foo(const bool addressGood, const int* ptr) {
if (addressGood) { return ptr[0]; }
else { return 0; }
}
Tuy nhiên có thể một nhà điều hành ternary (?:
) đảm bảo rằng ptr
sẽ không được truy cập trừ khi addressGood
là đúng?
Hoặc một trình biên dịch tối ưu có thể tạo mã truy cập ptr
trong mọi trường hợp (có thể làm hỏng chương trình), lưu trữ giá trị trong thanh ghi trung gian và sử dụng gán điều kiện để thực hiện toán tử bậc ba?
int foo(const bool addressGood, const int* ptr) {
// Not sure about ptr access conditions here.
return (addressGood) ? ptr[0] : 0;
}
Cảm ơn.
AFAIK, vâng, nó không được đánh giá chi nhánh khác. – chris
Kiểu thiết kế: API thực sự không nên có 'addressGood'. Biểu diễn chuẩn của địa chỉ không đúng là '0'. I E. 'int foo (const const int * ptr) {return ptr? * ptr: 0; } ' – MSalters
Không chắc chắn nếu' const const int * 'thực sự có ý nghĩa. – rsp1984