Why constexpr
不适用于std::cout
,但适用于printf
?
#include <iostream>
constexpr void f() { std::cout << ""; } //error
constexpr void g() { printf(""); } //ok
And why std::cout
与 lambda 一起使用constexpr
?
#include <iostream>
int main () {
auto h = []() constexpr { std::cout << ""; }; //ok
}
从技术上讲,它不适用于其中任何一个。
From [dcl.constexr]:
对于既不是默认值也不是模板的 constexpr 函数或 constexpr 构造函数,如果不存在参数值,则函数或构造函数的调用可以是核心常量表达式的计算子表达式,或者对于构造函数,可以是常量初始值设定项一些对象([basic.start.static]),该程序格式错误,无需诊断.
f()
and g()
从来都不是常量表达式(也不是std::cout << x
nor printf()
是 constexpr 函数),所以constexpr
声明格式不正确。但编译器不是required诊断这一点(在这种情况下,可能很容易,但在一般情况下......不是那么容易)。您所看到的是,您的编译器能够诊断一个问题,但不能诊断另一个问题。
但他们都错了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)