众所周知,make_pair
推导类型。这就是它存在并且方便的原因。
现在看到这个 example :
std::pair <int,int> foo;
std::pair <int,int> bar;
foo = std::make_pair (10,20);
bar = std::make_pair (10.5,'A'); //ok: implicit conversion from pair<double,char>
现在我想了解上面这行中的推导发生的确切时间:
bar = std::make_pair (10.5,'A');
它是否创建一个对,然后在分配时隐式地将 double
转换为 int
并将 char
转换为 int
?
最佳答案
它首先创建一个 std::pair<double, char>
感谢辅助函数的类型推导 std::make_pair
它会创建一对与您传递给它的类型完全相同的类型,无论您稍后将这对类型分配给哪种类型。
然后这个对象被分配给一个std::pair<int,int>
这要归功于 templated assignment operator .此运算符基本上允许可分配类型( U1
到 T1
, U2
到 T2
)内部分配(在您的情况下) double
到int
和一个 char
到int
.
该语言没有“预测”将使用表达式的变量类型的功能,这将需要制作 pair<int,int>
中间没有这一步。
如果您想避免该步骤,您必须在构造对时明确,这意味着您不应该使用类型推导 std::make_pair
而是std::pair
的构造函数,它要求您输入显式类型。但是,我怀疑这会因为优化而提高性能。
关于c++ - make_pair 如何隐式推断类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15061271/