pair<int, int> pr{1, 42};
auto pr = make_pair(1, 42); // 利用函数模板
pair pr{1, 42}; // 利用类模板, C++17
int a1[] = {1,2,3}; // 可以自动推出长度 a1[3]
array<int, 3> a2{1,2,3}; // 需要手动指定长度
// array<int> a3{1,2,3}; // 报错
array a{1,2,3}; // 都交由编译器推导出 array<int, 3>,C++17
这种自动推导机制,可以是编译器根据构造函数来自动生成,又或者手工提供一个推导向导
template<typename T>
struct MyObj {
MyObj(T value);
}
MyObj obj1{string("hello")};
// 得到 MyObj<string>
MyObj obj2{"hello"};
// 得到 MyObj<const char*>
MyObj(const char*) -> MyObj<string>;
MyObj obj{"hello"};
// 隐式转换,得到 MyObj<string>
multimap<string, int>::iterator lower, upper;
std::tie(lower, upper) = mmp.equal_range("four"); // C++14之前
auto [lower, upper] = mmp.equal_range("four"); // C++17