c++ 未定义行为消毒剂:未定义行为[重复]

vaqhlq81  于 2023-10-21  发布在  其他
关注(0)|答案(1)|浏览(118)

此问题已在此处有答案

Uninitialized variable behaviour in C++(4个答案)
What happens when I print an uninitialized variable in C++? [duplicate](4个答案)
8天前关闭
我试图解决回文数问题使用面向对象的cpp。我面临着一个奇怪的错误发生在我的代码说:“有符号整数溢出:-1734809184 * 10不能在类型“int”中表示。这里是我的代码,我需要一些有用的帮助,以通过测试用例。

class Solutiuon {
public:
    bool isPalindrome(int x) {
        int rev, temp;
        temp = x;
        while (x > 0) {
            rev = rev * 10 + (x % 10);
            x /= 10;
        }
        if(rev == temp)
            return true;
        else
            return false;
    }
};

对于我的代码,我希望它返回true为回文数和false为非回文数。

k7fdbhmy

k7fdbhmy1#

您正在经历经典的未定义行为。在您的代码中,变量rev在您访问rev = rev * 10 + (x % 10)之前未初始化。
首先,您应该显式地将rev初始化为0。C++不会自动为你做这件事。如果不显式初始化它,值可以是 * 任何值 *。
作为一个附加说明,你的解决方案没有任何面向对象的东西。
最后一点:

if(rev == temp)
            return true;
        else
            return false;

相当于:

return rev == temp;

相关问题