我想了解为什么C++20在我试着做下面的事情时会抱怨,也许有人能帮我。
我定义了一个方法,如下所示:
void doStuff(Point& dest) {
...
}
当我试图做以下工作时:
doStuff(Point(x,y));
我得到了错误:C++ initial value of reference to non-const must be an lvalue
当我创建Point& dest
-> const Point& dest
时,或者如果我为Point(x,y)
定义了一个新变量,但是如果我不想将dest定义为const或者我不需要变量,为什么编译器会抱怨这一点呢?在有些情况下,我希望将其作为引用传递进来,而有些情况下,我希望将其与函数调用保持一致,以使事情更加直观。显然,我在这里给出的例子非常简单,但你明白了。
值得注意的是,我知道我可以这样做:
doStuff(static_cast<Point&>(Point()));
但这似乎是没有必要的,我想找到一种方法来实现这一点,而不是所有其他的废话。任何帮助都是最感谢的!我可能错过了一些很明显的东西,我不是C++专家。
发布于 2022-08-07 20:06:12
您可以接受(重载) rvalue引用void doStuff(Point&& dest)
附带注意:如果你想要的话,你可以直接把它传递给lvalue参考版本。
void doStuff(Point& dest);
inline void doStuff(Point&& dest) { doStuff(dest); }
https://stackoverflow.com/questions/73270664
复制相似问题