真的要区分mutable和imutable变量吗?

nowherekai 发布于 2014年07月14日
无人欣赏。

王垠写了篇英文博客, 讨论了Swift数组的一个语言层面的设计错误。大致内容如下,

在Xcode 6 beta 3 中:

let a = [1, 2]      // a是常量(imutable)数组
var b = a           // b是可变(mutable)数组,是a的一个copy
b[1] = 3            // 改变b的内容, a的内容不变
a                   // a 仍是[1,2]
b                   // b 变成了[1,3]

在原来的Xcode 6 beta 2中会a,b的内容都会改变,常量可以改变当然是错误的。所以beta3中做了修改,可是这样改了之后在语义层面还是有问题, 一个变量的alias竟然是一个copy,这让人很但疼。原文的内容更详细,也给了解决方法,就不翻译了。

C/C++/go 中的const的概念也差不多如此。我第一次遇到const有关的问题实在前年实习的时候,那时候刚学会C++,看到《C++编程思想》的作者说应该使用const,我的代码里const满天飞, 写的函数参数中使劲加const, 如f(cosnt int a)等, 最后发现写了别人没法用我的接口,因为他们写函数是不加const的, 最后我把const都删了。最后发现自己真不是学C++的料,改学Ruby了。

现在觉得const真没什么用,有什么证据表明提高多少效率吗?纯属给程序员增加负担啊。

共3条回复
董一凡 回复于 2014年07月15日

f(const int a)谁教你这么用的。知其然不知其所以然,所以你才会觉得没用。

你仔细想想,在多线程环境里,一个类(就叫MyClass吧)里有如下两个函数 Result doSomthing(const Widget& s)constResult doSomthing(Widget& s)

在使用的时候你觉得有什么区别。你需要额外做什么事情才能保证线程安全。

tinyfool 回复于 2014年07月15日

const和imutable不是一个概念,用途不同的

东岸往事 回复于 2014年07月15日

Scala也有个var val。。。。。另外C/C++ 还有个作用是限制参数吧

登录 或者 注册