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

cht*_*tlp 8 c++ g++

我刚刚发现,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);                                                           
}
Run Code Online (Sandbox Code Playgroud)

我使用编译它g++ test_type.cpp -Wall -Wconversion,但仍然没有生成警告.我正在使用g ++ v4.6.1.任何人都知道如何让g ++为此生成警告,或者它无法完成?

Ker*_* SB 4

几乎任何适合的东西都可以构造对(和元组)。特别是,每个元素都可以由任何可隐式转换为它的元素构造。基本上,它“做你所期望的”。它pair的构造函数模板看起来像这样:

template <typename U, typename V>
pair(U && u, V && v) : first(std::forward<U>(u)), second(std::forward<V>(v))
{ }
Run Code Online (Sandbox Code Playgroud)

然而,你应该说:

v.emplace_back(3.8, 3);
Run Code Online (Sandbox Code Playgroud)

  • +1,但有一个挑剔,它们可以由任何“隐式”可转换的东西构造而成,而不仅仅是可转换的。长期以来,这一直是标准措辞(C++03,不确定 C++98),尽管 C++03 无法实现该限制。 (2认同)