我总是听到这样的规则:更改按值赋予函数的参数是错误的编码风格。相反,最好创建一个被修改的副本。
但我认为在以下情况下,更改功能参数是可以接受的。您认为最好的方法是什么?
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);
}
答案 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);
...
}
它更清晰,优化编译器将在两种情况下创建类似的代码。