2012-07-15 35 views

Trả lời

10

Không, nó ổn. Nó sẽ không tạo ra hành vi không xác định trong mã này. Bạn sẽ chỉ thay đổi giá trị của a hoặc b thành 5, theo điều kiện.

8

này là hoàn toàn tốt, miễn là cả hai mặt của điều kiện là biểu thức có thể được sử dụng để khởi tạo một tài liệu tham khảo (ví dụ như các biến, dereferences con trỏ, vv)

float& x = some_condition()? a : *(&b); // This is OK - it is the same as your code 
float& x = some_condition()? a : b+1; // This will not compile, because you cannot take reference of b+1 
+0

Vâng, không có khả năng biên dịch là một hành vi được xác định hoàn hảo, phải không? –

+0

Có thể cho rằng, có - một chương trình bị hình thành không biểu hiện hành vi được xác định. – Puppy

+1

Thất bại nhanh, thất bại sớm. –

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