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