写入一个按值函数参数的好样式吗?

时间:2015-08-17 13:25:19

标签: c++

我总是听到这样的规则:更改按值赋予函数的参数是错误的编码风格。相反,最好创建一个被修改的副本。

但我认为在以下情况下,更改功能参数是可以接受的。您认为最好的方法是什么?

Point3f GetWorldPoint(int x, int y)
{
    x = saturate(x, 0, width);
    y = saturate(y, 0, height);

    ...
}

template<typename T>
T saturate(T val, T min, T max) {
    return std::min(std::max(val, min), max);
}

2 个答案:

答案 0 :(得分:2)

我要把我的脖子伸到这里说它没事。例如:

template<class T>
Matrix4x4<T> Transpose(Matrix4x4<T> m)
{
    return m.Transpose();
}

template<class T>
Matrix4x4<T> Transpose(Matrix4x4<T> const & m)
{
    Matrix4x4<T> n(m);

    return n.Transpose();
}

哪个更简洁?

答案 1 :(得分:1)

我对使用

有异议
Point3f GetWorldPoint(int x, int y)
{
    x = saturate(x, 0, width);
    y = saturate(y, 0, height);

    ...
}

因为即使在语义上,x和y在饱和函数之前和之后也不相同(它们毕竟是饱和的)。在更复杂的情况下,这可能会变得令人困惑。当然,在明显的功能中,在饱和之后,你现在仍在使用饱和x。

无论如何,

没有错
Point3f GetWorldPoint(int origX, int origY)
{
    int x = saturate(origX, 0, width);
    int y = saturate(origY, 0, height);

    ...
}

它更清晰,优化编译器将在两种情况下创建类似的代码。