2016-06-29 15 views
5

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 (...) một cuộc gọi hàm tạo rõ ràng?

+0

(trực giao) Gợi ý: sử dụng 'lớp enum Foo' và' static_cast () '. – lorro

+0

Trong 'Foo foo (Foo (ac> 1))', thứ hai 'Foo' thực chất là một diễn viên. – Jarod42

+1

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

Trả lời

4

Tôi không nghĩ rằng bạn có thể làm điều này:

Foo foo (ac > 1); 

Giả sử bạn định nghĩa Foo enum như:

enum Foo : bool { Left = false }; 

Điều gì sẽ xảy ra nếu bạn gọi:

Foo foo(true); 

Bạn không có giá trị enum thích hợp cho những gì bạn muốn khởi tạo.

+0

Đó không thực sự trả lời câu hỏi * cho mỗi *, mặc dù đó là một cảnh báo hợp lệ để đúc liên quan đến 'enum' trong hầu hết các trường hợp. –

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