C++为什么不要在嵌套作用域中重复使用同样的名称

发布时间:2021-11-26 14:42:12 作者:iii
来源:亿速云 阅读:144

这篇文章主要讲解了“C++为什么不要在嵌套作用域中重复使用同样的名称”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++为什么不要在嵌套作用域中重复使用同样的名称”吧!

ES.12: 不要在嵌套作用域中重复使用同样的名称

Reason(原因)

这会导致更难弄清楚到底哪个变量在使用。可能引起维护问题。

Example, bad(反面示例)

int d = 0;
// ...
if (cond) {
   // ...
   d = 9;
   // ...
}
else {
   // ...
   int d = 7;
   // ...
   d = value_to_be_returned;
   // ...
}

return d;

这一个很大的if语句,很容易漏掉内部作用域引入了一个新变量d这个事实。这是有名的错误源之一。这种在内部作用域中重用名称的做法被称为“遮盖”。

Note(注意)

“遮盖”主要是在函数太大或者过于复杂时发生问题。

Example(示例)

处于最外侧的函数参数的遮盖问题是被语言禁止的。

void f(int x)
{
   int x = 4;  // error: reuse of function argument name

   if (x) {
       int x = 7;  // allowed, but bad
       // ...
   }
}
Example, bad(反面示例)

重用成员名称作为局部变量同样会引起问题:

struct S {
   int m;
   void f(int x);
};

void S::f(int x)
{
   m = 7;    // assign to member
   if (x) {
       int m = 9;
       // ...
       m = 99; // assign to local variable
       // ...
   }
}
Exception(例外)

我们经常在派生类中重用基类的函数名:

struct B {
   void f(int);
};

struct D : B {
   void f(double);
   using B::f;
};

这容易引发错误。例如,如果我们忘记using声明,调用d.f(1)时就无法发现f函数的整数版本。

我们是否需要定义一个特别的适用于类继承情况下的遮盖/隐藏规则?

Enforcement(实施建议)

感谢各位的阅读,以上就是“C++为什么不要在嵌套作用域中重复使用同样的名称”的内容了,经过本文的学习后,相信大家对C++为什么不要在嵌套作用域中重复使用同样的名称这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. python函数中对象、函数嵌套、名称空间和作用域的示例分析
  2. JavaScript作用域中闭包的用法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++

上一篇:如何进行Android的布局优化

下一篇:C#如何实现基于Socket套接字的网络通信封装

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》