我正在使用g ++来编译我的C ++程序,但我想停止类似int和dooble之间的隐式转换,例如: 我有一个使用double作为参数的函数,但是当我将此函数的参数发送给一个int时,编译传递没有错误或警告。
这是我的问题,如何停止隐式转换?
感谢。
答案 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 ];
}
希望这有帮助。