Nếu tôi xác định một enum như vậy:xây dựng enum với kiểu "bool" cơ bản từ boolean?
enum Foo : bool { Left = false, Right = true };
sau đó cố gắng xây dựng một từ một boolean như vậy:
int main (int ac, const char **av) {
Foo foo (ac > 1);
cout << boolalpha << bool(foo) << endl;
return 0;
}
nó không thành công, nhưng làm việc với một nhà xây dựng thêm như sau:
Foo foo (Foo(ac > 1));
Tại sao điều này? Tôi nghĩ Foo foo (...)
là một cuộc gọi hàm tạo rõ ràng?
(trực giao) Gợi ý: sử dụng 'lớp enum Foo' và' static_cast() '. –
lorro
Trong 'Foo foo (Foo (ac> 1))', thứ hai 'Foo' thực chất là một diễn viên. – Jarod42
Tôi đoán 'Foo (ac> 1)' là kết quả định kiểu của '(ac> 1)' thành 'Foo'. Và 'Foo foo (Foo (ac> 1));' liên quan đến việc gọi hàm tạo bản sao byfefault của 'Foo'. – sameerkn