c++ - g++ 编译器选项,用于警告类型转换与 ublas::bounded_vector

标签 c++ boost type-conversion implicit-conversion boost-ublas

考虑以下代码:

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

关于c++ - g++ 编译器选项,用于警告类型转换与 ublas::bounded_vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9821610/

相关文章:

c++ - 以 Null 结尾的字符串的 "NULL"或 "\0"符号是否存储在文件中?

c++ - 将 hana::tuple 中的类型转换为 hana::tuple 中的 std::vector<type>

c++ - OpenCV - 访问沿曲线/路径的像素

c++ - 递归包含自身列表的对象

c++ - 为什么 pthread_create() 返回 0 但线程永远不会启动

c++ - 是否可以重用 binary_oarchive 实例?

c++ - boost 几何中点的最小定向边界矩形

python - 如何快速将 '001100' 之类的字符串转换为 numpy.array([0,0,1,1,0,0])?

ruby - 在 ruby​​ 中类型转换为整数

java - java算术运算结果的数据类型