g++编译器选项,用于警告使用ublas::boundd_vector进行类型转换

g++ compiler option to warn about type conversions with ublas::bounded_vector

本文关键字:boundd vector 类型转换 ublas 选项 编译器 用于 警告 g++      更新时间:2023-10-16

考虑以下代码:

#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>的转换,否则根本不可能。如果有这样的函数/构造函数,编译器就没有理由在你使用它时警告你