Nó chỉ ra rằng char c[] = {"a"};
là hoàn toàn hợp lệ trong cả hai C++03 và C++11.Tại sao trình khởi tạo có chứa một chuỗi ký tự hợp lệ để khởi tạo mảng `char`?
Tôi không mong đợi nó được, bởi vì nó là một mảng của char
không phải của char const*
, và tôi mong đợi một brace-initialiser để yêu cầu một loại tương thích cho mỗi "mặt hàng" của nó. Nó có một mục và đó là một số char const*
không phải là char
.
Vậy điều gì làm cho việc khởi tạo này hợp lệ? Và có lý do nào cho việc đó không?
Tương tự, char c[] = {"aa"};
biên dịch và in c
kết quả ở đầu ra "aa
".
tôi sẽ mong đợi char c[]{"a"}
mới có giá trị trong C++ 11, tất nhiên, nhưng nó không giống nhau! Tương tự, char c[] = {'a'}
hiển nhiên trong cả hai, như là char c[] = "a"
.
Bạn đã thử 'char c [] = {" aa "};'? –
@VJo: Cũng hợp lệ. –
Tại sao bạn mong đợi nó không hợp lệ? Nó không thực sự rõ ràng những gì bạn đang yêu cầu. Nó hợp lệ vì không có quy tắc nào cấm nó. Bạn sẽ cấm quy tắc nào? – jalf