gpt4 book ai didi

c++ - 返回引用和级联函数的使用

转载 作者:行者123 更新时间:2023-11-28 02:54:37 26 4
gpt4 key购买 nike

请告诉我级联的使用,以及什么时候使用 & before function like this int &func()我应该在哪里使用请给我一个小例子,谢谢。我认为它确实会返回一个地址,但不知道如何使用。

最佳答案

你将要犯一个 C++ 中非常常见的新手错误,即返回对死对象的引用。

int &GetNumber()
{
int number = 123;
return number;
}

int main()
{
int x = GetNumber();
int y = x + 1;
}

看起来无辜,但会产生所谓的未定义行为。这意味着程序可以为所欲为——它可能会崩溃,或者有时会崩溃。无论如何,都不会安全。如果您尝试这样做,您的编译器甚至可能会警告您。原因是到时候GetNumber已完成,本地number被销毁,你最终得到一个被销毁对象的引用。

通常,您会想要返回一个拷贝,而不是一个引用。这是在 C++ 中做的“正常”事情:

int GetNumber() // now OK
{
int number = 123;
return number;
}

int main()
{
int x = GetNumber();
int y = x + 1;
}

只有当您知道引用的对象在函数返回后将继续存在时,返回引用才是安全的。一个例子是当你刚刚返回一个你被传递的引用时:

int &MyFunction(int &number)
{
// do something
return number;
}

这允许您链接函数:

struct Example
{
Example &MyFunction(Example &example)
{
// do something
return example;
}
};

int main()
{
Example example;
example.MyFunction(example).MyFunction(example).MyFunction(example);
}

现在,如果这个例子让你觉得特别没用(它应该如此),看看标准库如何处理 <<std::ostream 打电话用于实际用例。

std::cout << 1 << "a" << 0.5;

此语法有效,因为每个 operator<<调用返回对 std::cout 的引用.

关于c++ - 返回引用和级联函数的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22282841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com