将非引用作为引用传递,不带临时变量
我正在尝试执行以下操作:调用一个函数,该函数将引用作为参数,而不传递“变量”,仅传递值。 我的编译器(gcc)不应该能够生成临时“变量”来发送吗?看起来 mvc 以某种方式做到了这一点(项目中的其他人使用它)。
我有:
foo(Vector&,Vector&)
每当我尝试调用 foo(Vector(1,2,3),Vector(4,5,6))
时,我都会得到没有匹配的函数来调用 foo(Vector,向量);注意:候选人是 foo(Vector&,Vector&)
我该怎么办? 为什么不起作用?有什么概念我不理解吗?
谢谢。
I am trying to do the following: call a function which takes references as parameters without passing "variables", just values.
Shouldn't my compiler(gcc) be able to make temporary "variables" to send in? It would seem that mvc does it, one way or another (other person in project uses it).
I have:
foo(Vector&,Vector&)
Whenever I try to call foo(Vector(1,2,3),Vector(4,5,6))
I get no matching function for call to foo(Vector,Vector); note: candidates are foo(Vector&,Vector&)
What should I do?
Why doesn't it work? Is there some concept I do not comprehend?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Vector(1,2,3)
创建一个临时变量,并且临时变量不能绑定到非常量引用!因此,将参数
const
设置为:现在它可以工作了!
Vector(1,2,3)
creates a temporary, and a temporary cannot be bound to non-const reference!So make the parameters
const
as:Now it'll work!
您需要作为 const 引用传递:
非常量引用只能绑定到左值,临时不是左值。
You need to pass as const reference:
non-const references can be bound only to l-values, temporary is not a l-value.
如果要传递临时变量,请使用 const 引用。
Use
const
references if you want to pass over temporary variables.