lambda类型的局部变量指针有一个0xcc 0xcc 0xcc 0xcc
没有初始化局部变量统计数据
int main()
{
auto a = []()
{
printf("aa");
};
a();
int b = 1;
return 0;
}
在visual studio中,观看变量& a in break point show
&a 0x0113f8d7 {...} main::__l2::void <lambda>(void) *
0x0113F8D7 cc cc cc cc ????
0x0113F8DB cc cc cc cc ????
否则,&amp; b显示
&b 0x0113f8c8 {0x00000001} int *
0x0113F8C8 01 00 00 00 ....
我在调用未初始化的lambda函数的位置或方式
答案 0 :(得分:5)
C ++标准要求完整对象的大小大于0(空基类子对象可以占用0个字节)。
lambda对象a
是无状态的(因为它什么都没有捕获),但是它不能是零大小,所以它的大小是1.这一个字节的内容没有定义,因为那里没有任何东西存储
请注意,只要程序无法观察到差异,编译器就可以根本不为它分配存储空间。
答案 1 :(得分:2)
lambda不是函数指针。这是一堂课。此代码等效于以下内容:
<?php
if(($this->uri->segment(1)=='reports') || ($this->uri->segment(2)=='manageflyers' && $this->uri->segment(3)=='save')){
//do nothing
}else{
//some js code
}
“a_lambda”是内部生成的唯一类名,由编译器生成。
该类不包含任何内容且没有类成员,因此当您查看class a_lambda {
public:
void operator()()
{
printf("aa");
}
};
a_lambda a;
时,您看到的只是未初始化的内存。