c++ - 返回静态本地引用

标签 c++ coding-style static reference return-value

假设我有一个函数将返回一个大数据结构,目的是调用者将立即复制返回值:

Large large()
{
    return Large();
}

现在假设我不想依赖任何类型的编译器优化,例如返回值优化等。还假设我不能依赖 C++11 移动构造函数。我想就以下代码的“正确性”收集一些意见:

const Large& large()
{
    static Large large;
    large = Large();
    return large;
}

它应该按预期工作,但是即使它是 const 限定的,返回对静态本地的引用也是糟糕的风格吗?

最佳答案

这完全取决于应该按预期工作是什么意思。在这种情况下,所有调用者将共享对完全相同变量的引用。另请注意,如果调用者将复制,那么您实际上是在禁用 RVO(返回值优化),它将在所有当前编译器 [*] 中工作

我会尽可能远离这种方法,它不是惯用的,在许多情况下可能会造成混淆。

[*]我所知道的所有编译器中的调用约定决定返回(即不适合寄存器)变量的函数接收隐藏指针到调用者为变量分配空间的位置。也就是说,优化 是由调用约定强制执行的。

关于c++ - 返回静态本地引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9133965/

相关文章:

c++ - 强制转换为基础引用并进行复制是一种肮脏的黑客行为,但它究竟有什么肮脏之处呢?

c# - 从静态函数访问外部变量

C# 错误(使用接口(interface)方法): An object reference is required for the non-static field, 方法或属性

PHP 网站转换为静态 HTML 网站 - 链接问题

c++ - 打开 CV 2.2 包含目录丢失

c++ - 使用 Qt/C++ 确定 Google Drive 位置

.net - .NET 中的方法名称可以以 Get 开头吗

c++ - "template <> int line<0>::operator[](int y) const"有什么作用?

c++ - 迷失在指针的世界里

objective-c - 快速枚举被认为是错误的形式还是被普遍接受?