Tôi ngạc nhiên bởi những lỗi biên dịch sau:'yếu tố dư thừa trong struct initializer' lỗi với C++ 11 thống nhất khởi
template <typename T>
struct A
{
A(T t): t_{t} {}
T t_;
};
struct S
{
};
int main()
{
A<S> s{S{}};
}
Lỗi này là (với kêu vang):
test.cpp:4:16: error: excess elements in struct initializer
A(T t): t_{t} {}
^
test.cpp:15:10: note: in instantiation of member function 'A<S>::A' requested here
A<S> s{S{}};
^
GCC đưa ra một lỗi tương tự.
Tôi mong đợi biểu thức t_{t}
để cố gắng sao chép cấu trúc t_
từ t
. Vì S
có một hàm tạo bản sao được tạo ngầm, tôi không mong đợi đây là một vấn đề.
Ai đó có thể giải thích những gì đang xảy ra ở đây?
'nên tránh cú pháp khởi tạo đồng bộ vì chính xác những lý do này ... và vì nhiều lý do khác như thay đổi ngữ nghĩa khi sửa đổi' S'. – ipc
@ipc: Tôi sẽ không đi xa, nhưng thực tế là thỉnh thoảng nó có thể phức tạp :) –
cú pháp khởi tạo không đồng nhất? – zahir