Tôi có câu hỏi liên quan đến thủ tục khấu trừ loại tham số mẫu chức năng.Dấu ngoặc đơn-init-danh sách và thứ tự khấu trừ loại mẫu chức năng
Hãy ví dụ này:
#include <vector>
#include <sstream>
#include <string>
#include <iterator>
#include <fstream>
int main()
{
std::ifstream file("path/to/file");
std::vector<int> vec(std::istream_iterator<int>{file},{}); // <- This part
return 0;
}
Nếu tôi hiểu được những điều đúng, tham số thứ hai là suy luận là loại std::istream_iterator
trong đó constructor mặc định được gọi.
Thích hợp std::vector
constructor được khai báo là:
template <class InputIterator>
vector (InputIterator first, InputIterator last,
const allocator_type& alloc = allocator_type());
Kể từ kiểu tham số đầu tiên là suy luận như std::istream_iterator<int>
tham số thứ hai là suy luận như std::istream_iterator<int>
quá và vì vậy ngữ nghĩa khởi thống nhất có thể được áp dụng. Những gì tôi không có ý tưởng về là những gì để loại khấu trừ xảy ra. Tôi thực sự sẽ đánh giá cao một số thông tin về điều này.
Cảm ơn trước!
Tính năng này có hoạt động không? Nếu như vậy đầu tiên phải được khấu trừ đầu tiên. – Dani