Gần đây tôi đã yet again encountered các ký hiệuLàm thế nào là nó phân tích cú pháp: xây dựng giấu tên tạm thời với danh sách init chuẩn bị tinh thần
(const int[10]){ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }
Như tôi nhớ lại nó cho phép trong cả C và C++, nhưng qua cơ chế ngôn ngữ hoàn toàn khác.
Tôi tin rằng trong C++ quan điểm chính thức là nó là một xây dựng một tạm thời giấu tên thông qua một loại epxlicit chuyển đổi (T)
đúc biểu rằng sẽ làm giảm tới một static_cast
, mà xây dựng một đối tượng qua 11 §5.2 C++ 0,9/4:
” một biểu
e
thể được chuyển đổi một cách rõ ràng cho một loạiT
sử dụng mộtstatic_cast
dạngstatic_cast<T>(e)
nếu việc kê khaiT t(e);
là tốt được hình thành, đối với một số phát minh tempor ary biếnt
(8,5)
Tuy nhiên, dàn diễn viên thể hiện cú pháp được xác định bởi C++ 11 §5.4/2 như là một trong hai unary thể hiện hay, đệ quy, một (
loại-id)
biểu thức truyền, trong đó trường hợp cơ sở đơn lẻ bị giảm xuống biểu thức đơn nhất.
Và theo như tôi có thể cho biết init-list có sẵn không phải là một biểu thức?
Một quan điểm khác có thể là nó ’ là một loại chuyển đổi rõ ràng thông qua ký hiệu chức năng, C++ 11 §5.2.3/3,
” một đơn giản-type-specifier hoặc typename-specifier theo sau là một chuẩn bị tinh thần-init-list tạo ra một đối tượng tạm thời của các loại quy định
nhưng theo như tôi có thể nói đơn giản-loại-specifier có thể ’ t liên quan đến dấu ngoặc đơn, và typename-specifier liên quan đến từ khóa typename
?
Đây không phải là hợp pháp C++. Sau đây là cách chính xác: 'Bí danh {...}'. –
Xeo
@Xeo Bí danh 'Bí danh 'phải làm gì? –
'mẫu sử dụng Alias = T;', chỉ đơn giản là sử dụng bí danh để làm cho mã có thể phân tích cú pháp. –
Xeo