c++ - 我可以强制 C++11 lambda 通过引用返回吗?

标签 c++ c++11 lambda

由于 lambda 表达式按值返回,因此无法编译:

#include <iostream>

class Item
{
public:
    int& f(){return data_;}
private:
    int data_ = 0;
};

int main()
{
    Item item;
    auto lambda = [](Item& item){return item.f();};
    lambda(item) = 42;  // lambda(item) is a rvalue => compile time error 
    std::cout << item.f() << std::endl;
    return 0;
}

有没有办法解决这个问题?我可以强制 lambda 通过引用返回吗?

最佳答案

您应该将 lambda 返回类型指定为 int&。如果您关闭返回类型[并且 lambda 的形式为 return expression;,它将自动推断返回类型。

#include <iostream>

class Item
{
public:
    int& f(){return data_;}
private:
    int data_ = 0;
};

int main()
{
    Item item;
    auto lambda = [](Item& item) ->int& {return item.f();}; // Specify lambda return type
    lambda(item) = 42;
    std::cout << item.f() << std::endl;
    return 0;
}

关于c++ - 我可以强制 C++11 lambda 通过引用返回吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16789500/

相关文章:

索引链表的 C++/STL 结构(哈希表中的索引)

c++ - GTK 窗口的事件窗口的 X11 屏幕截图失败

c++ - 无法在 gRPC 中使用 proto 3.0 缓冲区生成客户端代码

javascript - 我无法理解 "Functions in Simplified JavaScript are lambdas with lexical scoping."

python - python 脚本完成后清除所有 c++ 对象

c++ - 关于如何识别 Rvalue 或 Lvalue 引用和 if-it-has-a-name 规则

c++ - 输入数字和字母时 cin.fail 不起作用

c++ - 在 while 循环中执行操作,直到调用组合键 C++

c++ - gcc 接受并拒绝带有嵌套泛型 lambda 的此代码,为什么?

java - Java 8 中的组合谓词