[英]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.