typedef double real8;
typedef real8 Real_t;
Real_t& x(int y);
什么是Real_t&
?我只看过一个数据类型后跟“&”表示通过引用传递。
但这是在申报行中。这是什么意思?
答案 0 :(得分:8)
这意味着该函数返回对Real_t
的引用,实际上是double
。 Real_t
是real8
,如果您解析所有typedef,则为double
。
你应该小心点。如果通过引用传递的结果未从存在于函数末尾的作用域中检索,那么您将有一个悬空引用。
例如:
int& foo() {
int x = 8;
return x;
}
int main() {
int y = foo();
}
变量y
在main中最终引用一个变量,当foo()
返回时它已经超出范围,因此使用它是未定义的行为。如果从一个单例或某个超出函数x
范围的东西中检索到foo()
,那么它仍然会存在,这样就可以了。
人们有时会在编译单元之间以确定的方式返回对初始化静态全局变量的引用,因此您可能会看到这与静态的一样使用:
MyClass& MyStaticVar() {
static MyClass instance;
return instance;
}
这也没关系,因为初始化后程序持续时间内的静态生命。
答案 1 :(得分:7)
这意味着x
是一个返回对Real_t
的引用的函数。
通过引用返回的示例是类中的数据访问。例如,std::vector::at()返回对向量元素的引用。
对于一个安全返回引用的自由函数,函数内部必须有一些非显而易见的东西,以确保不返回悬空引用。