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的答案,我就会把它标记为社区维基,我是诚实的。;-)