use*_*939 10 c++ pointers const reference keyword
正如有效C++一书中所述:"尽可能使用const.",人们会认为这个定义:Vec3f operator+(Vec3f &other);更好地定义为Vec3f operator+(const Vec3f &other) const;甚至更好const Vec3f operator+(const Vec3f &other) const;.
或者使用5个const关键字的示例:const int*const Foo(const int*const&)const;
当然,你应该只在可以有的地方包括const.我问的是,尽可能使用它们是一个好习惯吗?虽然它确实为您提供了更多错误安全的代码,但它可能会变得非常混乱.或者,例如,你应该忽略指针和引用const(除非你真的需要它),并且只在类型本身上使用它,因为const int* Foo(const int* parameter)const;它不会太乱了?
其他信息:http: //duramecho.com/ComputerInformation/WhyHowCppConst.html
提前致谢!
如果您发现普通类型安全有助于您使系统正确(确实如此;尤其是在大型系统中),您会发现const正确性也有帮助。
const当您想确保不会意外或有意更改变量时,您应该使用。一些常量(全局和类静态、字符串和整数,但不是具有非平凡构造函数的变量)可以放在可执行文件的只读部分,因此如果您尝试写入它会导致分段错误。
您应该明确使用const作为遵循此原则的函数以及函数参数的说明符。如果您不必更改实际参数,请使其const. 这不会限制此类函数的可能用途,而是扩展它们,因为现在它们可能用于const参数和const对象。
在声明中
const int* foo(const int* const&) const;
Run Code Online (Sandbox Code Playgroud)
每个都const意味着不同的东西,是的,显然应该在需要时使用它。
使用const增加了程序的类型安全性。
[18.3] 我应该“早点”还是“晚点”尝试让常量正确?
在非常、非常、非常开始的时候。
const尽可能使用通常是一件好事,但这是一个糟糕的措辞。您应该在const 任何可能且有意义的地方使用。
最重要的是(它可能很少会带来额外的优化机会),它是一种记录您不修改某些内容的意图的方法。
在operator+您给出的成员的具体示例中,最好的解决方案不是 make everything const,而是operator+基于 memberoperator+=并按值采用一个参数的独立式,如下所示:
T operator+(T one, T const& two) const { return one += two; }
Run Code Online (Sandbox Code Playgroud)
此解决方案适用于T出现在加号的任一侧,它允许链接,不复制代码,并且允许编译器执行最大程度的优化。
的语义operator+要求制作副本,因此您也可以让编译器制作它(另一个将被优化掉)。
可以制作one一个const&,但是您必须手动制作一个副本,这可能是次优的(并且更难以理解)。