1

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

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

谢谢。

4

3 回答 3

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.
}
于 2010-12-24T13:08:06.180 回答
2

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

void func(int x){}

int main()
{
   func({2.3}); // error: narrowing
}
于 2010-12-24T10:17:54.840 回答
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 ];
}

希望这可以帮助。

于 2010-12-24T19:07:53.317 回答