0

所以我很好奇在 C++ 中通过引用从一个文件到另一个文件是否可以传递变量或对象,如下例所示。

字符串示例:

int main() {
  //
  std::cout << GetName() << std::endl;
}

std::string name = "Paul";

std::string& GetName() {
  return name;
}

对象示例:

int main() {
  //
  std::cout << GetEmployee().GetAge() << std::endl;
}

Employee employee;

Employee& GetEmployee() {
  return employee;
}
4

3 回答 3

6

是的,上述工作,但不常用。它之所以有效,是因为在您的情况下,您返回其地址的对象是静态的。以下将不起作用:

std::string& GetName() {
  std::string name = "Paul";
  return name;
}

请注意,编译器可能会允许您这样做,但是由于变量name是在堆栈上分配的,因此它的地址在方法结束后指向未分配的堆栈空间,并且访问它会导致未定义的行为。

于 2021-09-12T18:49:54.347 回答
1

这些代码示例中的问题不在于通过引用返回具有静态存储持续时间的变量。您可以通过引用返回这些变量,因为它们在退出函数后仍然存在。

问题是您应该避免在文件范围内声明变量。

请注意,您可能不会从函数引用返回到具有自动存储持续时间的对象,因为它们在退出函数后将不再存在。

于 2021-09-12T18:50:01.143 回答
-1

是的,这是安全的,因为在这种情况下,引用的变量仍然存储在类中。
如果变量超出范围就不行了。

于 2021-09-12T18:48:48.097 回答