Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;将变量传递到函数时声明变量_C++_Class_Variables - Fatal编程技术网

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

我来自一个c#的世界,我们这样做是允许的。当我在C++中尝试时,我不会有编译器错误,但我不相信它确实在工作。 因此,对于更有经验的人,您是否可以这样做:

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) { ... }