嗨,我正在阅读c++中的引用变量,阅读关于结构的引用,并从函数中返回对结构的引用。我读到的示例代码如下:
#include <iostream>
using namespace std;
struct sysop {
char name[26];
char quote[64];
int used;
};
const sysop & use(sysop & sysopref);
int main()
{
sysop looper = {"Rick Looper", "I'm a goto kind of guy.", 0};
use (looper);
cout << “Looper: “ << looper.used << “ use(s)\n”;
sysop copycat;
copycat = use(looper);
cout << “Looper: “ << looper.used << “ use(s)\n”;
cout << “Copycat: “ << copycat.used << “ use(s)\n”;
cout << “use(looper): “ << use(looper).used << “ use(s)\n”;
return 0;
}
const sysop & use(sysop & sysopref)
{
cout << sysopref.name << “ says:\n”;
cout << sysopref.quote << endl;
sysopref.used++;
return sysopref;
}这是来自C++ Primer的书。无论如何,我理解这个例子,但让我感到困惑的是use(looper)。我的意思是函数原型要求返回对常数结构变量的引用,但是在这个语句中,函数没有返回任何引用。我不确定关于常数结构的引用是否有特殊之处,或者允许在不返回数据或什么的情况下使用函数。
有人能给我解释一下吗?
发布于 2015-04-20 17:20:52
你说过:
但是在这个语句中,函数没有返回任何引用。
这是不正确的。该函数仍然返回一个const引用。返回值在调用点被忽略。
你可以用:
sysop const& ref = use (looper);要捕获函数的返回值,请执行以下操作。
发布于 2015-04-20 17:21:46
令我困惑的说法是使用(活计)。我的意思是函数原型要求返回对常数结构变量的引用,但是在这个语句中,函数没有返回任何引用。
是的,确实如此。您必须阅读整个语句,特别是其中表示返回类型为sysop const&的地方。那是一种参考类型。
在本例中,您将一个引用传递到函数中,并将相同的引用直接传回。
发布于 2015-04-20 17:22:37
我的意思是函数原型要求返回对常数结构变量的引用,但是在这个语句中,函数没有返回任何引用。
当您接受sysopref作为使用use(sysop & sysopref)的参数时,它已经是一个引用。当您从函数中返回变量时,只需执行chanel操作即可。
https://stackoverflow.com/questions/29754265
复制相似问题