C++中的Variable Shadowing

Variable Shadowing,直接翻译叫做变量影子,好像有点懵,下面用例子来看下这是什么意思。

一 求和例子

下面是个简单的求和代码,计算0~upper的数字相加和,

#include <cstdio>

int main(void)
{
    int sum = 0;
    int upper = 100;

    for (int i = 0; i != upper; ++i)
    {
        sum += i;
    }

    printf("sum: %d\n", sum);

    return 0;
}

编译ok,输出如下,
在这里插入图片描述
在for循环的循环体里对sum求和。假如我们在for循环里又定义了sum变量,如下,

#include <cstdio>

int main(void)
{
    int sum = 0;
    int upper = 100;

    for (int i = 0; i != upper; ++i)
    {
        int sum = 0;
        sum += i;
    }

    printf("sum: %d\n", sum);

    return 0;
}

根据C++语言的定义,在for循环的作用域里定义的sum变量会隐藏掉作用域外定义的同名sum变量,这样在for循环里对sum求和,对外面的sum不会产生任何影响,这个就叫做Variable Shadowing,我们可以这么说:for循环里定义的sum变量shadowing了外部定义的sum变量。

从这一点来看,这个Variable Shadowing应该翻译为变量隐藏更合适一点。


二 分析

这样写代码一般我们编译不会报任何warning或者error,但是这种情况有时并不是我们想要的,可能是自己笔误写的,一般来说,大家不会在一个作用域里定义多个相同名字的变量,即使他们互不干扰,这是比较好的代码风格。

如何在编译时把这种情况以warning的形式提示出来呢?这就需要在编译时加上-Wshadow的编译选项,本人用的是code blocks,在build option里就直接勾上就行了。
在这里插入图片描述
再编译,就会有warning提示,
在这里插入图片描述
有了warning提示,我们就会去检查代码,看是否有问题。


三 总结

本文是看了《C++ Weekly -Ep 167》的视频然后简单总结的。如果有写的不对的地方,请留言指正,谢谢。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值