Jhe*_*ico 1 c++ language-features const
编辑:这个问题可能会使用更合适的标题.随意在评论中提出建议.
在使用带有大类集的C++时,我曾遇到const一种麻烦的情况,不是因为它的功能,而是因为它有一个非常简单的定义.它对整数或字符串的适用性是显而易见的,但对于更复杂的类,通常有多个属性可以彼此独立地修改.我想很多人都被迫了解mutable关键字可能会有类似的挫折感.
对我来说最明显的例子是矩阵类,表示3D变换.矩阵将表示平移和旋转,其中每个都可以在不修改另一个的情况下进行更改.想象一下以下类和函数假设添加'多属性const'.
class Matrix {
void translate(const Vector & translation) const("rotation");
void rotate(const Quaternion & rotation) const("translation");
}
public void spin180(const("translation") & Matrix matrix);
public void moveToOrigin(const("rotation") & Matrix matrix);
Run Code Online (Sandbox Code Playgroud)
或者想象一下预定义的const关键字,比如"_comparable",它允许您定义随意修改对象的函数,只要您保证不会更改任何会影响对象排序顺序的内容,从而简化了对已排序容器中对象的使用.
这种功能的优点和缺点是什么?你能想象在你的代码中实际使用它吗?使用当前的const关键字功能是否有一种很好的方法来实现这种功能?
记住
const我希望这是一个严格的编译时功能.const自切片泥以来是最愚蠢的事情,我会把它看成是你对此有同感.无需发帖,谢谢.编辑:回应SBK关于会员加价的评论,我建议你没有.对于标记为const的类/成员,它的工作方式与以往一样.对于标记为const("foo")的任何内容,它将所有成员视为可变,除非另有标记,将其留给类作者以确保其功能与广告一样有效.此外,在内部表示为2D数组的矩阵中,您不能将单个字段标记为const或非const用于平移或旋转,因为所有自由度都在单个变量声明中.
Scott Meyers正在研究一种使用仲裁限制扩展语言的系统(使用模板).
所以你可以说一个函数/方法是Verified,ThreadSafe(等等或你喜欢的任何其他约束).然后,这种约束函数只能调用具有至少(或更多)约束的其他函数.(例如,一个方法使得ThreadSafe只能调用标记为ThreadSafe的另一个方法(除非编码器明确地抛弃了该约束).
这篇文章是:http:
//www.artima.com/cppsource/codefeatures.html
我喜欢的酷概念是在编译时强制执行约束.