在c ++中禁用隐式转换

Gau*_*v K 2 c++

是否可以在C/C++中禁用隐式转换.

假设我想写一个有效函数,只让我输入 integers in range [1,10]

我已经写了:

#include <iostream>


using namespace std;

int main( )
{
    int var=0;
    cout << "Enter a number (Integer between 1 to 10) : ";

    while( (!(cin >> var )) || (var > 10 ) || (var < 1) )
    {
        cout << "U nuts .. It can only be [1,10]\n";
        cin.clear();
        cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
        cout << "Enter a number (Integer between 1 to 10) : ";
        }

    cout << "\nYou entered : " << var;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是如果用户输入9.5,则通过将float 9.5转换为9并将其存储在var中来接受它.我希望任何浮动条目都被视为无效条目.我如何最紧凑地实现这一目标.

我不想做这种事:

#include <iostream>
#include <cmath>


using namespace std;

int main( )
{
    float var=0;
    cout << "Enter a number (Integer between 1 to 10) : ";

    while( (!(cin >> var )) ||(var < 1)|| (var > 10 ) || !(ceilf(var) == var) )
    {
        cout << "U nuts .. It can only be [1,10]\n";
        cin.clear();
        cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
        cout << "Enter a number (Integer between 1 to 10) : ";
        }

    cout << "\nYou entered : " << var;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

这符合我的目的.但是我想知道的是,从float到int的转换有什么方法 - 我可以抑制它或者它可以将它显示为错误输入.

类似于cin >> varvar类型的方式int- 如果我们输入char它返回false条件.我们能否实现同样的float进入?

谢谢

Ste*_*sop 6

但是如果用户输入9.5,则通过将float 9.5转换为9并将其存储在var中来接受它.

不,不.如果用户输入9.5,则cin >> var在其到达时停止读取.(并将其留在流上).没有float-to-int转换,因为你没有读过a float,只是一个int.

修复是读取输入的其余部分(之后cin >> var),并确保在结束后没有遗留任何错误int.