#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
返回与输入相同的类型。