为什么在尝试使 i = i*i 时出现错误 "using uninitialized memory 'i'" 和 "uninitialized local variable 'i' used"

Why am I getting the error "using uninitialized memory 'i'" and "uninitialized local variable 'i' used" when trying to make i = i*i

我是 C++ 的新手,正在测试 while 循环和 C++ 的绝对速度及其对我 CPU 的影响,我遇到了以下错误:

Severity Code Description Project File Line Suppression State Warning C6001 Using uninitialized memory 'i'
Severity Code Description Project File Line Suppression State Error 4700 uninitialized local variable 'i' used

我不知道如何阅读错误消息,甚至还没有在 C++ 中遇到过初始化,所以我不知道该怎么做。

#include <iostream>
using namespace std;
    
int main() {
    long long i = 0;
    while (i < 10000000000000000) {
        long long i = i*i;
        cout << i ;
    }
    cout << i;
    return 0;
}

long long i = i * i; 隐藏在 while 循环外声明的 long long i = 0;。它是一个完全独立的变量,您正试图将它初始化为它自己的平方值。如果要使用在循环外声明的变量 i,请删除重新声明:

#include <iostream>
using namespace std;

int main() {
    long long i = 0;
    while (i < 10000000000000000) {
        i = i*i;
        cout << i ;
    }
    cout << i;
    return 0;
}

请注意,这将是一个无限循环,只会一遍又一遍地打印 0

在 while 循环体中

while (i < 10000000000000000) {
    long long i = i*i;
    cout << i ;
}

您声明了未初始化且具有不确定值的变量 i,您正试图使用​​此不确定值来初始化变量本身。

在这个声明中

    long long i = i*i;

在初始化器中使用了相同的声明变量 i 隐藏了循环之前出现的同名变量的声明

用声明代替语句

   i = i*i;

但最初您应该将变量 i 设置为某个不等于 0 的值,例如设置为 10。

long long i = 10;

否则表达式i * i的结果总是等于0。

类似

#include <iostream>
using namespace std;

int main() {
    long long i = 10;
    while (i < 10'000'000'000'000'000) {
        i = i*i;
        cout << i ;
    }
    cout << i;
    return 0;
}

尽管在选择变量 i 的初始值时应谨慎,因为表达式 i * i 中可能会发生溢出,并且可能会出现无限循环。