Tôi đang viết một hàm chung chung như dưới đây.C++ về việc khởi tạo chung trong các mẫu
template<class Iterator, class T>
void foo(Iterator first, Iterator last) {
T a;
cout << a << endl;
// do something with iterators
}
typedef vector<double>::iterator DblPtr;
vector<double> values;
foo< DblPtr, int>();
chức năng này in ra một giá trị xác định cho biến a
, trong khi nếu tôi thay đổi khởi tạo vào
///
T a = T()
cout << a << endl;
// do something with iterators
tôi có thể thấy rằng giá trị khởi tạo là 0
như tôi mong đợi.
Nếu tôi gọi T a
biến được khởi tạo với giá trị mặc định, nhưng nếu tôi gọi T a = T()
Tôi tin rằng do tối ưu hóa các nhà xây dựng bản sao nên được gọi với giá trị của T()
đó vẫn là một sự mặc định.
Tôi không thể hiểu sự khác biệt đằng sau 2 dòng này và lý do tại sao điều này xảy ra?
vĩ đại giải thích! Tất cả rõ ràng bây giờ và cảm ơn rất nhiều. –