Các mã sau đây tạo ra một lỗi biên dịch trong Xcode:Implicit Template Parameters
template <typename T>
struct Foo
{
Foo(T Value)
{
}
};
int main()
{
Foo MyFoo(123);
return 0;
}
error: missing template arguments before 'MyFoo'
Thay đổi Foo MyFoo(123);
-Foo<int> MyFoo(123);
sửa chữa vấn đề này, nhưng không nên trình biên dịch có thể tìm ra thích hợp loại dữ liệu?
Đây có phải là lỗi trình biên dịch hay tôi hiểu nhầm các tham số mẫu ẩn không?
nếu nó có thể suy ra các loại, nó có thể suy ra các không gian. –
Nó có thể suy ra loại cho cuộc gọi đến hàm tạo, nhưng không thể cho không gian lưu trữ. Nếu bạn định nghĩa một biến chỉ đơn giản là 'Foo', nó có thể giữ cả hai' Foo 'và' Foo '? Hay nó luôn luôn biết bí mật một 'Foo ' trong trái tim của nó? Nếu biến là 'const' thì nó có thể được thực hiện, vì giá trị không thể được gán lại, nhưng sau đó chúng ta sẽ có các quy tắc từ vựng khác nhau cho' const T' so với 'T' và sự tàn phá lớn sẽ xảy ra. –