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,谢谢!你说得对,它确实可以编译!