g++编译器和隐式转换

发布于 2024-10-09 05:34:11 字数 161 浏览 6 评论 0原文

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

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

谢谢。

I'm using g++ for compiling my C++ program, but I want to stop the implicit conversion between type like int and dooble for example:
I have a function that use a double as parameter, but when I send in this function's parameter an int, the compilation pass without error or warning.

so that is my question, how to stop the implicit conversions??

thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

左秋 2024-10-16 05:34:11

你可以试试这个:

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

You could try this:

#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.
}
疯狂的代价 2024-10-16 05:34:11

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

void func(int x){}

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

You cannot avoid implicit conversion from lower to higher type. However you can do vice-versa
if your compiler supports C++0x.

void func(int x){}

int main()
{
   func({2.3}); // error: narrowing
}
木格 2024-10-16 05:34:11

我认为马丁的答案是正确的选择。
它可以在链接时找到转换。
如果必须在编译时查找,可以添加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 ];
}

希望这会有所帮助。

I think Martin's answer is the way to go.
It can find the conversion at link time.
If you have to find at compile time, you can add static_assert or
a similar one to the function template:

template<typename T>
void func( T ) {
  //static_assert( sizeof( T ) == 0, "..." ); // if you can use static_assert
  int a[ (sizeof( T ) == 0) ? 1 : -1 ];
}

Hope this helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文