【发布时间】:2014-04-12 16:57:30
【问题描述】:
正如Effective 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 在 C++11 中失去了它的价值,但除此之外,是的,const-correctness 有帮助。
-
指针和引用
const在作为函数参数传递时比值const更重要远。通过值传递时,您传递的是副本,与通过指针或引用传递时不同。 -
如果函数没有修改它们,你应该通过 const 引用传递函数参数,看起来凌乱是无关紧要的。成员函数如果不修改对象就应该是 const,看起来乱七八糟是无关紧要的。
-
@PetrBudnik,
const关于按值传递的参数被完全忽略,所以它不仅不重要重要,而且不重要 -
@JonathanWakely “忽略”是什么意思?尝试编译
void foo(int const a) { a += 1; }...与引用或指针不同。因此,不在函数声明中使用它并不是什么大不了的事。但是如果你使用它,它不会被忽略,即使是复制也会被编译器强制执行。
标签: c++ pointers reference constants keyword