缩小转换范围


#include <iostream>
#include <vector>
#include <cctype>
using namespace std;
char get_selection() {
char selection{};
cin >> selection;
return toupper(selection);
}
int main() {
char selection {};
do{
selection = get_selection();
switch(selection){
...
}
} while(selection!='Q');
cout<<endl;
return 0;
}

我想知道为什么我会收到这个支票/警告/提示

Clang Tidy:缩小从"int"到有符号类型"char"的转换是实现定义的

我在那里做的唯一一件事就是获取char和"上套管";它,以防还没有,所以我不必在交换机上处理两个案例。有人知道我必须改变什么吗?为了摆脱这个问题,我会把它完全变成绿色的,因为这是唯一的问题?我似乎缺乏一些关于皈依的知识。

谢谢!

打印屏幕

在此函数中

char get_selection() {
char selection{};
cin >> selection;
return toupper(selection);
}

编译器进行从类型int(C函数toupper的返回类型(到类型char的隐式转换。

为了避免警告,进行显式转换,例如

char get_selection() {
char selection{};
cin >> selection;
return char( ::toupper( ( unsigned char )selection) );
}

另一个不依赖于实现定义行为的解决方案是:

return toupper(selection, std::locale());

此版本的toupper返回与输入相同的类型。

相关内容

  • 没有找到相关文章

最新更新