自动绑定到lamba函数的寿命是多少
What is the life span of an automatic bound to a lamba function?
如果一个自动机绑定到一个lambda函数,那么自动机的寿命是否会延长到lambda函数的寿命?
最简单的情况:
auto genfunc (int start)
{
int count=start;
return [&count] {
return count++;
};
}
这是好的,还是未定义的行为?
否,count
的生存期不会延长,因为您通过引用捕获了它。寿命延长规则列在§12.2[class.temporary]第4项和第5项中;5,并且都不包括在lambda中通过引用捕获。
调用genfunc
返回的lambda将导致未定义的行为。§5.1.2/24[expr.prim.lambda]中的注释中提到了这一点
注意:如果实体是通过引用隐式或显式捕获的,那么在实体的生存期结束后调用相应lambda表达式的函数调用运算符可能会导致未定义行为--尾注]
自动挡的寿命会延长到lambda函数的寿命吗?
没有。lambda在这里可能会混淆,所以让我们将其重写为一个结构:
struct X
{
int operator()() const { return ref++; }
int& ref;
};
auto genfunc (int start)
{
int count=start;
return X{count};
}
我们创建的X
对象包含一个对临时(count
(的引用(ref
(,该引用在对象返回后立即超出范围。lambda没有什么特别之处——悬空引用就是悬空引用。
不过,没有理由保留引用,只需按值捕获即可:
auto genfunc (int start)
{
return [start]() mutable {
return start++;
};
}
注意所需的mutable
关键字。
相关文章:
- 函数的时间复杂度是多少?
- 这个递归函数有什么作用?运行时的复杂性是多少?
- 此print_star函数的运行时复杂度是多少?
- 在 C++ 中,默认情况下构造函数为类的数据成员提供的值是多少?
- 在本征C++中 MKL 的函数"zgges"等价物是多少?
- 从 long 转换C++位集构造函数的复杂性是多少?
- 我的 sumASCII 函数中的此偏移量是多少?
- 给定一个整数 N>0,区间 [0, 2^N) 中有多少个整数正好有 N-1 个设置位?编写一个返回正确答案的简短函数
- 导出函数中有多少下划线('_')(C++
- 我能知道我的函数有多少参数吗?
- 如果函数按值传递并按值返回,将调用复制构造函数多少次
- 如何创建一个递归函数来显示有多少元音具有输入
- 我应该在 stoi() 函数中放入多少位
- 复制构造函数被调用了多少次?
- 此函数调用了多少次
- 如果类没有任何成员变量,则通过临时对象调用类的成员函数的开销是多少?
- C++中的类/函数模板占用了我的二进制文件的百分比是多少?
- 需要为派生类指定多少个构造函数
- 遇到异常时给定函数的返回值是多少
- 缺少返回语句的非 void 函数的返回值是多少?