g ++编译器和隐式转换

时间:2010-12-24 10:12:53

标签: c++ g++ type-conversion implicit-conversion

我正在使用g ++来编译我的C ++程序,但我想停止类似int和dooble之间的隐式转换,例如: 我有一个使用double作为参数的函数,但是当我将此函数的参数发送给一个int时,编译传递没有错误或警告。

这是我的问题,如何停止隐式转换?

感谢。

3 个答案:

答案 0 :(得分:4)

你可以试试这个:

#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.
}

答案 1 :(得分:2)

您无法避免从较低类型到较高类型的隐式转换。但是你可以反之亦然 如果您的编译器支持C ++ 0x。

void func(int x){}

int main()
{
   func({2.3}); // error: narrowing
}

答案 2 :(得分:1)

我认为马丁的答案是要走的路。 它可以在链接时找到转换。 如果必须在编译时找到,可以添加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 ];
}

希望这有帮助。

相关问题