我刚刚发现C ++没有给出从pair<double, int>
到pair<int, int>
的任何警告,这有点令人惊讶。这是我的计划test_pair.cpp
:
#include <vector>
#include <utility>
using namespace std;
int main()
{
std::vector<pair<int, int> > v;
pair<double, int> p = make_pair(3.8, 3);
v.push_back(p);
}
我使用g++ test_type.cpp -Wall -Wconversion
编译它,但仍然没有生成警告。我正在使用g ++ v4.6.1。任何人都知道如何让g ++为此生成警告,或者它无法完成?
答案 0 :(得分:4)
Pairs(和元组)可以从几乎任何适合的东西构建。特别是,每个元素都可以由任何可隐式转换为它的元素构成。基本上,它“做你期望的”。 pair
的构造函数模板如下所示:
template <typename U, typename V>
pair(U && u, V && v) : first(std::forward<U>(u)), second(std::forward<V>(v))
{ }
但是,你应该说:
v.emplace_back(3.8, 3);