抱歉,这是一个冗长的问题,但让我把它分解一下:
C++标准是否保证:
C++标准是否保证:
void (*Ptr)(void) = [] {};
return Ptr;
这将仍然是定义行为吗?
我理解,在闭包中,它将被定义,因为该闭包对象通过值移动/复制;但是,虽然我知道“常规”函数具有无限/没有生命周期,但Ptr的目标是否也是如此?或者在每次lambda实例化时销毁并重新创建?
我关心的原因是,如果不行,我无法使用lambda作为回调函数。我想知道。
operator()
(因为后者是非静态的)。该虚拟对象应该是局部于“调用者”的,或者是静态的,即在上述上下文中应该可以正常工作。但我并没有立即看到语言规范中的保证。语言规范甚至没有假定该虚拟对象的存在。 - AnT stands with Russiaoperator()
?它只需要运行相同的代码即可。operator()
为什么要被实现?可以通过调用operator void(*)()()
返回的静态函数来实现operator()
。 - Yakk - Adam Nevraumontoperator fptr_t
返回静态成员函数的地址。然而,我不确定该示例有多规范(从技术上讲,由于它在“注释”中,因此是非规范性的)。 - M.M