Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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++_Heap Memory_Stack Memory - Fatal编程技术网

C++ 在堆栈上创建临时对象作为参数

C++ 在堆栈上创建临时对象作为参数,c++,heap-memory,stack-memory,C++,Heap Memory,Stack Memory,在任何没有带垃圾收集器的指针的编程语言中,我都能做到 DrawLine(new Vector(0, 0), new Vector(100, 100)); P>但是,在C++中,如果 DrawLine < /C>不负责删除其参数,则调用两个向量(0,0)< /> >和(100100)< /C> >的最短路径调用 DrawLine : Vector v(0, 0); Vector w(100, 100); DrawLine(v, w); 有没有办法把它变成一个单独的陈述?特别是如果v和w只是该

在任何没有带垃圾收集器的指针的编程语言中,我都能做到

DrawLine(new Vector(0, 0), new Vector(100, 100));
<> P>但是,在C++中,如果<代码> DrawLine < /C>不负责删除其参数,则调用两个向量<代码>(0,0)< /> >和<代码>(100100)< /C> >的最短路径调用<代码> DrawLine <代码>:

Vector v(0, 0);
Vector w(100, 100);
DrawLine(v, w);

有没有办法把它变成一个单独的陈述?特别是如果
v
w
只是该函数的参数,而没有其他函数使用它,那么它似乎有点冗长。为什么我不能这样做:

DrawLine(Vector(0, 0), Vector(100, 100));

为什么我不能这样做:

DrawLine(Vector(0, 0), Vector(100, 100));
您正在尝试将临时变量作为参数传递。你可以分三种情况来做

  • 如果
    drawine
    采用常量引用传递的参数:

    void绘制线(常数向量&v1,常数向量&v2)

  • 如果可以复制
    向量
    ,并且
    绘制线
    采用通过值传递的参数:

    void绘制线(矢量v1,矢量v2)

  • 如果可以移动
    Vector
    ,并且
    DrawLine
    采用右值引用传递的参数:

    void drawine(向量&v1、向量&v2)

  • 唯一失败的情况是通过非常量引用传递参数,因为临时变量无法绑定到它

    void DrawLine(Vector& v1, Vector& v2);
    

    “为什么我不能像这样做:
    DrawLine(Vector(0,0),Vector(100100));
    ”因为
    DrawLine
    愚蠢到需要左值,或者编译器坏了?行。另一个不能这样做的情况是,它在您的编码约定中被禁止。@MikeCAT,谢谢!你说得对,它确实可以编译!