g ++ компилятор и неявное преобразование - PullRequest
1 голос
/ 24 декабря 2010

Я использую g ++ для компиляции моей программы на C ++, но я хочу остановить неявное преобразование между типами типа int и dooble, например: У меня есть функция, которая использует double как параметр, но когда я отправляю в параметре этой функции int, компиляция проходит без ошибок или предупреждений.

так что это мой вопрос, как остановить неявные преобразования ??

спасибо.

Ответы [ 3 ]

4 голосов
/ 24 декабря 2010

Вы можете попробовать это:

#include <iostream>

template<typename T>
void func(T t);

void func(double d)
{
    std::cout << "D:" << d << "\n";
}


int main()
{
    func(2.3);   // OK
    func(2);     // Fails at compile time.
}
2 голосов
/ 24 декабря 2010

Вы не можете избежать неявного преобразования из нижнего в верхний тип.Однако вы можете сделать наоборот, если ваш компилятор поддерживает C ++ 0x.

void func(int x){}

int main()
{
   func({2.3}); // error: narrowing
}
1 голос
/ 24 декабря 2010

Я думаю, что ответ Мартина - путь. Он может найти конверсию во время ссылки. Если вам нужно найти во время компиляции, вы можете добавить static_assert или аналогично шаблону функции:

template<typename T>
void func( T ) {
  //static_assert( sizeof( T ) == 0, "..." ); // if you can use static_assert
  int a[ (sizeof( T ) == 0) ? 1 : -1 ];
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...