我正在练习 C++,但发现了一些问题:
#include <iostream>
#include <string>
using namespace std;
int main() {
int a = 2;
{
cout << a;
cout << "\n";
float a = a / 2;
cout << "a= a/2 = ";
cout << a;
}
cout << "\n";
a = 2;
{
cout << a;
cout << "\n";
float b = a / 2;
cout << "b= a/2 = ";
cout << b;
}
}
Run Code Online (Sandbox Code Playgroud)
这个回报:
2
a= a/2 = 0
2
b= a/2 = 1
Run Code Online (Sandbox Code Playgroud)
我想知道为什么 a = a/2 = 0 ?
谢谢
这是一个微妙的错误。看看这段代码:
int a = 2;
{
float a = a / 2;
}
Run Code Online (Sandbox Code Playgroud)
在花括号之外,名称a指的是在int a顶部声明的整数。但是在花括号内,一旦到达float a声明所在的行,该名称a指的是float a大括号内部而不是int a大括号外部。
这是一个问题,因为线
float a = a / 2;
Run Code Online (Sandbox Code Playgroud)
意思是“创建一个名为atype的新变量float。哦,它需要一个初始值。没关系!给它值float a,除以 2。” 看到这里的问题了吗?变量a正在根据自身进行初始化,因此a / 2计算时间a尚未初始化并且结果未定义。
要解决此问题,只需提供float a一个新名称即可。