铸造配对的g++警告选项

g++ warning options for casting pair?

本文关键字:g++ 警告 选项      更新时间:2023-10-16

我刚刚发现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++为此生成警告,或者根本做不到?

对(和元组)几乎可以从任何适合的东西中构造。特别是,每个元素都可以由任何可以隐式转换为它的东西构建。基本上,它"做你期望的事情"。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);