g++编译器选项,用于警告使用ublas::boundd_vector进行类型转换
g++ compiler option to warn about type conversions with ublas::bounded_vector
考虑以下代码:
#include <iostream>
#include <vector>
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/io.hpp>
int main()
{
namespace ublas = boost::numeric::ublas;
double d = M_PI;
unsigned u = d;
std::cout << "d = " << d << std::endl;
std::cout << "u = " << u << std::endl;
ublas::bounded_vector<double,3> dVec = ublas::scalar_vector<double>(3,M_PI);
ublas::bounded_vector<unsigned,3> uVec = dVec; // type conversion!
std::cout << "dVec = " << dVec << std::endl;
std::cout << "uVec = " << uVec << std::endl;
return 0;
}
当我使用g++(4.6.1版)编译时,有以下选项:
g++ -g3 -Wall -Wextra -ansi -pedantic -Wconversion -std=c++0x test.cpp -o test
我收到以下警告:
test.cpp: In function ‘int main()’:
test.cpp:11:22: warning: conversion to ‘unsigned int’ from ‘double’ may alter its value [-Wconversion]
当我运行程序时,我得到:
$ ./test
d = 3.14159
u = 3
dVec = [3](3.14159,3.14159,3.14159)
uVec = [3](3,3,3)
编译器对标量的转换产生了警告,但对ublas转换没有警告,在这种情况下有没有办法让编译器写警告?看起来-Wconversion
或任何其他选项都不会执行此操作。
为什么任何编译器都应该对此发出警告?
ublas::bounded_vector<T,N>
的作者必须定义了从ublas::bounded_vector<U,N>
的转换,否则根本不可能。如果有这样的函数/构造函数,编译器就没有理由在你使用它时警告你
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中用vector填充一个简单的动态数组
- vector.resize()中的分配错误
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 在某些循环内使用vector.push_back时出现分段错误
- 当vector是tje全局变量时,c++中vector的内存管理
- std::vector的包装器,使数组的结构看起来像结构的数组
- 为什么(-1)%vector::size()总是返回0
- 在C++中将类(带有Vector成员)保存为二进制文件
- 编译器如何区分std::vector的构造函数
- 将 int 数组转换为 std::vector<int*>
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 在std::vector上存储带有模板的类实例
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 为什么std::vector比数组慢
- std::vector::迭代器是否可以合法地作为指针
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 为什么std::vector和std::valarray初始化构造函数不同