【发布时间】:2015-11-12 02:46:48
【问题描述】:
对我来说,pair 只是 tuple 的特例,但以下情况让我感到惊讶:
pair<int, int> p1(1, 2); // ok
tuple<int, int> t1(1, 2); // ok
pair<int, int> p2={1, 2}; // ok
tuple<int, int> t2={1, 2}; // compile error
为什么我们用{}初始化tuple会有区别?
我什至尝试了g++ -std=c++1y,但仍然有错误:
a.cc: In function 'int main()':
a.cc:9:29: error: converting to 'std::tuple<int, int>' from initializer list would use explicit constructor 'constexpr std::tuple<_T1, _T2>::tuple(_U1&&, _U2&&) [with _U1 = int; _U2 = int; <template-parameter-2-3> = void; _T1 = int; _T2 = int]'
tuple<int, int> t2={1, 2};
^
【问题讨论】:
-
如果你想要复制初始化语法,你应该可以做
auto t2=tuple<int, int>{1, 2};。重新错误,错误信息说明了一切。
标签: c++ c++11 tuples initializer-list list-initialization