王垠写了篇英文博客, 讨论了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真没什么用,有什么证据表明提高多少效率吗?纯属给程序员增加负担啊。
f(const int a)
谁教你这么用的。知其然不知其所以然,所以你才会觉得没用。
你仔细想想,在多线程环境里,一个类(就叫MyClass
吧)里有如下两个函数
Result doSomthing(const Widget& s)const
和Result doSomthing(Widget& s)
在使用的时候你觉得有什么区别。你需要额外做什么事情才能保证线程安全。