gpt4 book ai didi

c++ - 模 - gcc 的操作数顺序错误?还是UB?

转载 作者:太空狗 更新时间:2023-10-29 20:26:42 27 4
gpt4 key购买 nike

好吧,我今天做了一个小函数,它应该会生成一个随机字符串。

std::string randString(size_t length)
{
std::string randStr;
for(unsigned int i = 0; i < length; i++)
randStr.append(1, (char) rand() % 26 + 65);
return randStr;
}

我原以为只得到大写字母,但实际上我也得到了其他字符,如“3”或“)”。所以我假设存在某种操作数错误顺序。并在模数周围加上括号,我得到了预期的结果!我额外搜索了模和加法的操作顺序,它说模具有更高的优先级!任何人都可以解释为什么我必须用括号括起这个模数吗?

我用的是gcc 4.1.2

最佳答案

operator %oeprator+ 有更高的优先级,但转换更高。

因此,您在这里有 undefined 实现 (感谢@JamesKanze) 定义的行为,因为 signed char 溢出。

您不需要用括号将“模”运算符括起来,而是进行转换,因为您想要转换最终结果:(char)( rand() % 26 + 65 )

关于c++ - 模 - gcc 的操作数顺序错误?还是UB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18844186/

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