通过引用匿名实例

时间:2015-05-11 13:12:47

标签: c++

假设我有一个结构:

struct structazauras
{ 
string bla;
}

还有一些函数(在我的例子中,这个函数实际上是某个类的构造函数,但我认为这不是问题):

void myfunc(structazauras& mystruct) { }

然后我称之为myfunc:

..
myfunc(structazauras());
..

我收到错误:

no matching function for call to myfunc(structazauras) candidates are myfunc(structazauras&)

如果我将代码更改为:

structazauras tmp;
myfunc(tmp);

它会正常工作。

我觉得他(编译器)在structazauras传递对匿名实例的引用时遇到问题,但为什么呢?匿名实例存在于调用函数的堆栈中。

1 个答案:

答案 0 :(得分:2)

这是因为您无法将临时绑定到非const引用。将您的参考标记为const,它会起作用。

此外,您在定义

中使用标准C ++关键字(struct
void myfunc(structazauras& struct) { }

将名称更改为其他名称。或许你的意思是

void myfunc(struct structazauras&) { }

但是额外的struct在C ++中是多余的。