gpt4 book ai didi

c++ - 警告 C4800 : 'int' : forcing value to bool 'true' or 'false'

转载 作者:行者123 更新时间:2023-11-30 02:21:04 34 4
gpt4 key购买 nike

我编写了一个模板函数,它以 int32、bool 和 int16 作为输入。但是对于 bool,我收到了这个警告。任何想法,我该如何解决。

template<class T>
void GameControl::assignValues(char *gaff, T &output)
{
output = T(atoi(gaff));
}

函数调用如下:

int32 intout;
assignValues("1234", intout);
bool boolout;
assignValues("1234", boolout);

任何人都可以告诉,如何摆脱警告?

编辑:这有效,但不确定后果。我只是抑制了警告。

#pragma warning( push )
#pragma warning( disable : 4101)
// Your function
#pragma warning( pop )

最佳答案

您的第一项工作是将函数参数列表更改为 const char* gaff,因为标准 C++ 不允许将 const char[N] 衰减为字符*。具有讽刺意味的是,您的编译器没有发出诊断,而是提示可疑的转换!

至于那个警告,你可以强制问题

output = static_cast<T>(atoi(gaff));

然后大多数编译器会假定您知道自己在做什么。如果您仍然收到警告,则专门化 bool 案例的模板函数;总的来说,我认为我更喜欢的解决方案(除了关闭该特定功能的警告的务实方法):

template<>
void assignValues(const char *gaff, bool &output)
{
output = atoi(gaff) != 0;
}

关于c++ - 警告 C4800 : 'int' : forcing value to bool 'true' or 'false' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48943932/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com