C++:为成员函数的变异和非变异版本建议名称

use*_*855 1 c++

假设我有一个Image类,我想在图像上提供一些操作,比如缩放,旋转等.我想为每个操作提供两种类型的函数.一个修改对象而另一个修改不对象.在Ruby中,有些函数以!并指出这个将修改参数.

由于在C++/Java中不允许这样做,因此最佳命名约定是什么.例如,你如何命名img.scale()的Mutating和non-mutating版本?

谢谢

Jam*_*lis 10

一种选择是Scale用于变异版本和ScaleCopy非变异版本,因为它返回原始副本以及对副本执行的操作.

另一种选择是使非变异版本成为非成员函数.例如,

Image Scale(Image im, double scale_factor) {
    im.Scale(scale_factor);
    return im;
}
Run Code Online (Sandbox Code Playgroud)

我倾向于非成员方法,因为它减少了类中成员函数的数量.引用Herb Sutter的Monoliths Unstrung,"在可能的情况下,更喜欢将函数写成非成员非朋友."