#include <optional>
bool f() {
std::optional<int> opt;
return opt;
}
Không biên dịch: 'return': cannot convert from 'std::optional<int>' to 'bool'
Tư vấn tham khảo Tôi đã có thể nghĩ để tìm một lời giải thích, nhưng tôi đọc nó vì nó sẽ ổn.
Chuyển đổi ngầm định được thực hiện bất cứ khi nào một biểu thức của một loại T1 được sử dụng trong ngữ cảnh không chấp nhận loại đó, nhưng chấp nhận một số loại T2 khác; đặc biệt:
- khi biểu thức được sử dụng làm đối số khi gọi một hàm được khai báo với T2 là tham số;
- khi biểu thức được sử dụng như một toán hạng với toán tử mong đợi T2;
- khi khởi tạo một đối tượng mới thuộc loại T2, bao gồm câu lệnh return trong hàm trả về T2;
- khi biểu thức được sử dụng trong câu lệnh chuyển đổi (T2 là loại tích phân);
- khi biểu thức được sử dụng trong câu lệnh if hoặc vòng lặp (T2 là bool).
operator bool()
trongstd::optional
làexplicit
.