作者回复: 简单来说,指针是内存地址,引用是变量别名,指针可以是空,而引用不能为空。
作者回复: 这个是一个通用准则,但对于int、double这样小而简单的类型就有点“重”,int这样的内建类型可以直接用const T。
Boost库里有一个call_traits,它可以推导出最佳类型。
作者回复:
1.说的的很对。
2.const返回值可以强制函数的调用者无法修改,让外界用起来更安全。
作者回复: 我记得const最早是C++使用的,后来被借进了C。
const常量其实就是变量,没有内存页标记这种机制,只是编译器会做检查,运行时不会有约束。
作者回复: 说的挺好的,其实在effective 里对const也花了很多的篇幅,用好const真的能够让代码更安全。
作者回复:
1,加k是有些公司的命名风格,k大概是const的简化吧。
2.理解基本正确,constexpr还可以用在编译期计算,实现编译期函数、模板元编程。
作者回复: 对,volatile在底层开发的时候用的比较多,一般做上层应用开发、比如服务器、UI就很少用了。
作者回复: 对,这样外界用起来更加安全,给出去也放心。
作者回复: “万能引用”也要类型对才行,你的函数入口是const int&,而传入的是int*,这两个类型不匹配,那就肯定是不行的。
C++对类型的检查比较严格,这方面确实还要再学习了解一下。
作者回复: 不知道是哪个学校的学弟,见笑了。
const的用法比较零散,但又的确很重要,所以很有必要特别说一下。
作者回复:
1.*const用法仔细阅读也能理解,但这需要花费不少力气,我希望的是代码尽量让人轻松阅读,不是所有人都能或者愿意掌握复杂的指针用法的。
2.看C++应该看标准,尽量不要依赖编译器,volatile本身不具有原子性,应该用atomic库。
作者回复: 说的很好,我还见过const char * const * const,太可怕了。
作者回复: int func(const T& x ),这样,无论x是什么类型,都可以接受,而且在函数体里不会被改变。
作者回复: 前半句说的比较对,后面我觉得有点问题。
const常量不一定会在编译阶段做替换,这个不是标准里规定的,只是很多编译器都这么做来实现优化,不能把这种做法当成是必然。
const常量还是应该理解成运行时只读的变量。
作者回复: 读C++多,那可以试着自己改写优化一下这些代码。
作者回复: 说得挺好的。
返回const对象,就能保证它是安全不会被改变的,限制了它的内外部影响。