C++ 为什么没有';当条件为真时,x的值是否改变? intx=1; 如果(x>0) int x=2; 不能
你有这个变量。 当在一个范围内声明的变量与在外部范围内声明的变量同名时,就会发生这种情况 进行此修改将获得您期望的输出:C++ 为什么没有';当条件为真时,x的值是否改变? intx=1; 如果(x>0) int x=2; 不能,c++,C++,你有这个变量。 当在一个范围内声明的变量与在外部范围内声明的变量同名时,就会发生这种情况 进行此修改将获得您期望的输出: int x = 1; if (x > 0) int x = 2; cout << x; intx=1; 如果(x>0){ x=2;//现在您正在修改相同的x } 不能你有这个变量。 当在一个范围内声明的变量与在外部范围内声明的变量同名时,就会发生这种情况 进行此修改将获得您期望的输出: int x = 1; if (x > 0) in
int x = 1;
if (x > 0)
int x = 2;
cout << x;
intx=1;
如果(x>0){
x=2;//现在您正在修改相同的x
}
不能你有这个变量。
当在一个范围内声明的变量与在外部范围内声明的变量同名时,就会发生这种情况
进行此修改将获得您期望的输出:
int x = 1;
if (x > 0)
int x = 2;
cout << x;
intx=1;
如果(x>0){
x=2;//现在您正在修改相同的x
}
C++变量或其他符号声明中的CUT是它们的作用域中的局部,在不同的范围内重新声明它们,并且您将不会看到当前级别之外的赋值的影响。这关系到
- 局部范围(括号内的所有内容
{}
或紧接在控制流语句之后出现,如if
,else
,case
,while
或for
)
典型例子:
int x = 1;
if (x > 0) {
x = 2; // now you're modifying the same x
}
cout << x;
int j = 42;
if(j == 42) {
int j = 2; // Scoped block local variable
// Changes the local variable's value
}
- 类范围(任何类成员变量)
典型例子:
int x = 1;
if (x > 0) {
x = 2; // now you're modifying the same x
}
cout << x;
int j = 42;
if(j == 42) {
int j = 2; // Scoped block local variable
// Changes the local variable's value
}
- 命名空间范围(任何命名空间全局变量)。
原理同上。名称空间可以隐藏来自其他名称空间的变量(符号)
你的C++编译器可能会给你一个关于上面提到的情况的警告。
使用特定的GCC(G++),可以强制使用C++代码> Wshadow //COD>编译器标志。< P>在C++变量或其他符号声明中是局部的,在不同的范围内重新声明它们,并且您将不会看到当前级别之外的赋值的影响。这关系到
- 局部范围(括号内的所有内容
{}
或紧接在控制流语句之后出现,如if
,else
,case
,while
或for
)
典型例子:
int x = 1;
if (x > 0) {
x = 2; // now you're modifying the same x
}
cout << x;
int j = 42;
if(j == 42) {
int j = 2; // Scoped block local variable
// Changes the local variable's value
}
- 类范围(任何类成员变量)
典型例子:
int x = 1;
if (x > 0) {
x = 2; // now you're modifying the same x
}
cout << x;
int j = 42;
if(j == 42) {
int j = 2; // Scoped block local variable
// Changes the local variable's value
}
- 命名空间范围(任何命名空间全局变量)。
原理同上。名称空间可以隐藏来自其他名称空间的变量(符号)
你的C++编译器可能会给你一个关于上面提到的情况的警告。
使用GCC(g++),您可以使用-Wshadow
编译器标志强制执行该操作。如果下的x
与上面的变量不同。从中删除类型限定符。只需使用x=2
。if
下的x
与上面的变量不同。从中删除类型限定符。只需使用x=2代码>。我很高兴你有足够的动力发布一个答案:)我没有。@RSahu嗯,我觉得我可以在将来把它作为一个典型的傻瓜来使用。我对那个经常被问到的问题的看法太差了@RSahu我一拿到rep cap的答案,我就会把它标记为社区维基,我是诚实的。;-)我很高兴你有足够的动力来发布一个答案:)我没有。@RSahu好吧,我觉得我可以在将来把它作为一个典型的傻瓜来使用。我对那个经常被问到的问题的看法太差了@RSahu我一拿到rep cap的答案,我就会把它标记为社区维基,我是诚实的。;-)