Опция компилятора g ++ для предупреждения о преобразованиях типов с помощью ublas :: bounded_vector - PullRequest
1 голос
/ 22 марта 2012

Рассмотрим следующий код:

#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 или любой другой вариант не делает этого.

1 Ответ

0 голосов
/ 22 марта 2012

Почему любой компилятор должен предупреждать об этом?

Авторы ublas::bounded_vector<T,N> должны были определить преобразование из ublas::bounded_vector<U,N>, иначе это было бы невозможно вообще.И если такая функция / конструктор есть, у компилятора нет причин предупреждать вас, когда вы его используете.

...