您的位置:首页 > 其它

糟糕的const特性<2>

2015-09-19 12:22 253 查看
本文章将持续不断的吐槽const特性已经在开发中遇到的一些人对const的恶心用法。

const是C99,C++引入的关键字,意在防止变量的值被恶意修改。很多人喜欢使用这个特性,它在compile time 可以帮我们检查变量是否被恶意修改。但是const带来的副作用远远大雨它带来的好处。

1.复杂的使用方法

对,就是复杂的使用方法。去百度一下c++ const,随便点开一片文章,我敢打赌没有哪一篇文章不超过两页。(而那些博主在花了上千字的文章来介绍一个关键字后居然还有脸说const给我们带来了无尽的好处)

尤其是跟引用,指针,函数结合起来,规则多到你可以专门用两页纸来书写都写不完。

这么多的规则,我们在写代码时到底记得的能有几条?

请问自己以下几个问题:

请问const声明时放在*前面和后面有什么区别,用来修饰引用呢?怎么用来修饰指针的引用?

请问带const和函数不带const的函数有什么区别,如果函数是成员函数呢

...

一门编程语言应当做到语法尽量简单而组合出来的功能尽可能的强大。而const在语法上引入的混乱比它带来的好处简直要多得多。

2.函数的相互调用

Aaron编写了一个函数void func_a(const int a) {...}.然后在项目中到处调用了这个接口。后来Aaron离职了,Bill接替了他的工作。Bill现在要维护func_a, 它需要获取a的值,然后对这个值进行修改处理,于是Bill定义函数void func_b(int b)。然后调用func_b(a);

void func_a(const int a)

{
...
func_b(a);
...

}

这个时候编译器告诉它,禁止把const 类型的变量传递给非const的变量。

为了绕过编译器,Bill不得不定义了一个中间变量tmp_b,并将代码写成

void func_a(const int a)

{
...
int tmp_b = a;
func_b(tmp_b);
...

}

问题就在这里。如果变量a是一个数据很大的类型,中间变量的拷贝将会白白耗费很多内存空间。

而且我们仅仅为了这么一点点好处,却让代码的逻辑变得这么难看。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: