在C++函数中定义常量变量时,它的行为是否与静态变量类似?

ggazkfy8  于 2022-12-24  发布在  其他
关注(0)|答案(2)|浏览(134)

我有一个小问题。在C++中,在函数中定义一个常量整数,其值取决于函数的输入参数,这是否法律的和/或合理?如果是,该值在函数中是否保持不变,并随着对具有不同参数的函数的不同调用而改变,或者它是否像静态变量一样在整个程序的作用域中保持不变?
这里有一个简单的例子来说明我在代码中的意思。

void testMyVar(int x, int y){
   const int z = x/y;
   //use z for whatever computation
}

提前感谢您的帮助!

a0x5cqrl

a0x5cqrl1#

声明为const的变量一旦初始化就不能修改。
在这种情况下,当函数被输入时,z被初始化为x/y,并在函数运行期间保持该值,每次调用函数时,z都被初始化为xy的值。
没有与static相关的行为,因为变量未声明为static

b4lqfgs4

b4lqfgs42#

要意识到z一旦超出作用域就被“销毁”了,因为它不是static。如果z在函数作用域中或者在if/for/if中嵌套了3层深,则会出现这种情况

static int z = 42;  // I will label this z0

void testMyVar(int x, int y) {
    const int z = x/y;  // I will label this z1; this z is different than the static z above (z0)
    if (z > 10) {  // tests z1, not z0
        int z = x;  // non-const z; I will label this z2, which is different than z1 and z0
        z++;  // C++ uses inner-most scoped z (so here, it's z2), so this is good (non-const)
        for (int i = 0; i < z; i++) {
            int z = i / 2;  // I will label this z3, it gets re-evaluated every time through the for loop
            z = z * z;  // all 3 z refererences here is z3
            cout << z << endl;  // dumps z3
            cout << ::z << endl;  // dumps z0 note the global scoping operator ::
            }  // z3 gets "destroyed"
        }  // z2 gets "destroyed"
    }  // z1 gets "destroyed

C++语法不提供在不同代码范围指定命名变量范围的机制,仅在全局、类/结构和名称空间。因此,您不能专门使用顶级const int z(我标记为z1的),在代码嵌套级别中定义了更深的z的z2/z3。注意,我可以引用“全局”通过使用全局作用域运算符::在z3级别执行作用域静态z ::z

相关问题