Tôi chưa bao giờ thấy [[ noreturn ]] được sử dụng trên các chức năng trả về không có khoảng trống trước đó.Tôi có thể sử dụng [[noreturn]] trên các chức năng trả về không rỗng không?
Được định nghĩa sau đây?
[[ noreturn ]] int function();
int function(){
while(true){/* impl */}
return 0;
}
Lý do loại trả về phải là int
, là do hàm được chuyển đến hàm khác thông qua con trỏ hàm.
Vì vậy, giả sử người gọi trông giống như sau:
//call the non-returning function
int var = (*fptr)();
//use var some way (even though the function will never actually return)
std::cout << var;
sẽ triển lãm này bất kỳ loại hành vi không xác định?
Bạn có thể gặp phải sự cố về triển khai với phụ cấp thực hiện để giả định rằng vòng lặp vô hạn kết thúc. ([link] (http://blog.regehr.org/archives/161)) – chris
@chris Tôi cũng hy vọng gắn thẻ giá trị trả lại với [[might_unused]]. –
Từ liên kết bạn đã đăng: * Hành vi không xác định nếu hàm có thuộc tính này thực sự trả về. * – 101010