小编Sub*_*ent的帖子

指向lambda的指针指向目标的生命周期是多少?

对不起,这是一个冗长的问题,但让我分解一下:

C++标准是否保证:

void (*Ptr)(void) = [] {};
return Ptr;
Run Code Online (Sandbox Code Playgroud)

还会定义行为吗?

我理解,对于一个闭包,它将被定义,因为闭包对象是按值移动/复制的; 但是,虽然我知道'常规'函数具有无限/无生命,但Ptr的目标是否具有相同的?或者它是否被lambda的每个实例化破坏并重新创建?

我关心的原因是,如果不是,我不能使用lambdas作为回调.我想知道.

c++ lambda language-lawyer

12
推荐指数
2
解决办法
337
查看次数

C:下标一个不完整类型的数组是合法的吗?

我找不到标准中的相关位,但是gcc和clang允许它,所以我想我想知道它是编译器扩展还是语言的一部分.如果可以,请提供链接.

这可以通过以下方式产生:

extern char arr[];

func(arr[7]); /*No error.*/
Run Code Online (Sandbox Code Playgroud)

晚编辑:我想我最好能清楚地理解这一点,虽然我已经继续前进,但我从未做过这样的事情,所以我将奖励给第一个给我一个明确,简明的参考资料的人.关于为什么允许这样做的C89标准.如果没有人能在C89中找到答案,C99是可以接受的,但您需要先查看C89标准.

c extern incomplete-type

6
推荐指数
1
解决办法
826
查看次数

优先级问题和C中的++和*一元运算符

我的问题不长,但对我来说这很令人费解.我是那些(我认为理所当然)想要了解他们所学语言的每一条规则的人之一.我想知道为什么语言会做它的功能.

那么,为什么++*i增加值*i而不是i指针呢?preincrement运算符的优先级高于间接运算符.这似乎是一个常识性的事情,但同样,我必须确切知道为什么.如果可以,请提供参考.

c pointers operators operator-precedence unary-operator

3
推荐指数
1
解决办法
224
查看次数