铸造配对的g++警告选项
g++ warning options for casting pair?
我刚刚发现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);
相关文章:
- 警告处理为错误这里有什么问题
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 使用typeid警告未使用的变量
- 示例C++项目编译中的警告
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 如何修复编译器警告 C6386 和 C6385?
- 返回语句后的代码,没有警告
- 获取隐式转换溢出从无符号到已签名的警告
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 在未链接的部分上生成警告
- 警告 C4552:">>":未使用表达式的结果
- 禁止显示由于常量为零而比较始终为假的警告
- C++ 警告:将新创建的 gsl::owner<> 分配给非所有者
- 为什么布尔开关语句有编译器警告?