相关疑难解决方法(0)

为什么lambda表达式在未评估的操作数中不允许,但在常量表达式的未评估部分中允许?

如果我们看看草案C++标准部分5.1.2 Lambda表达式2段说(强调我的未来):

lambda表达式的评估导致prvalue临时(12.2).这个临时对象称为闭包对象.lambda表达式不应出现在未评估的操作数中(第5条).[注意:闭包对象的行为类似于函数对象(20.8).-结束注释]

和部分5.19 常量表达式2段说:

条件表达式是核心常量表达式,除非它涉及以下之一作为潜在评估的子表达式(3.2),但是未评估的逻辑AND(5.14),逻辑OR(5.15)和条件(5.16)操作的子表达式不被视为 [...]

并有以下子弹:

- lambda表达式(5.1.2);

那么为什么lambda表达式不允许在未评估的操作数中,但是在常量表达式的未评估部分中是允许的?

我可以看到,对于未评估的操作数,在几种情况下(decltypetypeid)的类型信息不是很有用,因为每个lambda都有一个唯一的类型.虽然为什么我们想要让它们在未经评估的不断表达的背景下不明确,或许是为了让SFINAE

c++ lambda constant-expression c++11 c++14

14
推荐指数
1
解决办法
6355
查看次数

标签 统计

c++ ×1

c++11 ×1

c++14 ×1

constant-expression ×1

lambda ×1