C++ c++;将变量传递到函数时声明变量
我来自一个c#的世界,我们这样做是允许的。当我在C++中尝试时,我不会有编译器错误,但我不相信它确实在工作。 因此,对于更有经验的人,您是否可以这样做:C++ c++;将变量传递到函数时声明变量,c++,class,variables,C++,Class,Variables,我来自一个c#的世界,我们这样做是允许的。当我在C++中尝试时,我不会有编译器错误,但我不相信它确实在工作。 因此,对于更有经验的人,您是否可以这样做: Entity->SetPosition(Vector2(200, 400)); 在Vector2中是一个类,设置位置的参数需要一个向量?这是允许的还是需要像这样预初始化变量: Vector2 aVector(200, 400); Entity->SetPosition(aVector); 谢谢 大卫 如果您已将SetPositi
Entity->SetPosition(Vector2(200, 400));
在Vector2中是一个类,设置位置的参数需要一个向量?这是允许的还是需要像这样预初始化变量:
Vector2 aVector(200, 400);
Entity->SetPosition(aVector);
谢谢
大卫
如果您已将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
to):
感谢@Simon指出这一点。一般来说,是的,这很好。一般来说,C++中的集合样式API将把值或代码< const和<代码>取到所设置的值。在这两种情况下,都可以使用内联表达式
class Entity {
public:
void SetPosition(const Vector2& value) { ... }
void SetPosition(Vector2 value) { ... }
};
但是在SetPosition
只引用一个引用的情况下,它是不合法的
void SetPosition(Vector2& value) { ... }
这不是setter的常用习惯用法,不过我可以问一下,还有什么更值得推荐的吗?@DavidC如果可能的话,我会使用
const&
版本。通过引用传递通常更有效,并且const&
可以防止接收方修改值。但对于某些对象,特别是那些不正确的对象,可能需要让它接受一个简单的value@JaredPar在传递临时值时,如本例中所示,按值传递和按引用传递之间可能没有区别。如果被调用函数实际上需要自己的副本(它将修改该副本),那么通过引用传递可能会更昂贵。由于各种历史原因,通过常量引用传递类类型,通过值传递其他类型的约定似乎无处不在,以至于其他任何东西都会引起人们的注意。但是对于现代编译器,我不会对它的性能做太多的研究,我相信在c++11中,你可以做Entity->SetPosition({200400})代码>如果这不会产生歧义。我收回这一点。它不起作用。我可能需要阅读更多关于c++11的内容。@Simon:如果您实现Vector2
来启用该行为,应该可以。请参阅此演示:
class Entity {
public:
void SetPosition(const Vector2& value) { ... }
void SetPosition(Vector2 value) { ... }
};
void SetPosition(Vector2& value) { ... }