c ++在将变量传递给函数时声明变量

时间:2012-07-12 06:50:38

标签: c++ class variables

我来自一个c#世界正在做这样的事情是允许的。当我在c ++中尝试时,我没有遇到编译错误,但我不相信它确实在工作。

所以对于经验丰富的人来说,你可以做这样的事情:

Entity->SetPosition(Vector2(200, 400));

因为在Vector2中是一个类,并且设置位置的参数需要一个向量?这是允许的还是我需要像这样预先初始化变量:

Vector2 aVector(200, 400);
Entity->SetPosition(aVector);

由于 大卫

2 个答案:

答案 0 :(得分:8)

Entity->SetPosition(Vector2(200, 400));
如果您已将SetPosition定义为以下某项,则

很好(并且更可取)

void SetPosition(Vector2 const & v); //Okay : const reference
void SetPosition(Vector2  v);        //okay : value

即,SetPosition接受参数const 参考,或者仅作为

但这不起作用:

void SetPosition(Vector2 & v);  //not okay : non-const reference

-

在C ++ 11中,你可以写这个(前提是你已经Vector2实现了enable this behavior

Entity->SetPosition({200, 400});

感谢@Simon指出这一点。

答案 1 :(得分:1)

一般来说是的,这很好。通常,C ++中的Set样式API将对要设置的值采用值或const &。在这两种情况下,都可以使用内联表达式。

class Entity { 
public:
  void SetPosition(const Vector2& value) { ... }
  void SetPosition(Vector2 value) { ... } 
};

虽然SetPosition仅提供参考

,但这不合法
void SetPosition(Vector2& value) { ... }

这不是setter的常用习惯用语