繁体   English   中英

g ++编译器和隐式转换

[英]g++ compiler and implicit conversion

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

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

谢谢。

您可以尝试以下方法:

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

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

void func(int x){}

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

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

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM