首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Constexpr数学函数

Constexpr数学函数
EN

Stack Overflow用户
提问于 2013-06-28 00:00:30
回答 3查看 17K关注 0票数 63

从这个page注意到,c++11中的数学函数似乎都没有使用constexpr,而我相信所有这些函数都可以使用constexpr。所以这给我留下了两个问题,一个是为什么他们选择不让函数常量表达式。对于像sqrt这样的函数,我可能会写自己的常量表达式,但是像sin或cos这样的东西会更复杂,所以有没有办法绕过它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-28 00:05:48

实际上,由于旧的和恼人的遗留问题,几乎没有一个数学函数可以是constexpr的,因为它们都有在各种错误条件下设置errno的副作用,通常是域错误。

票数 66
EN

Stack Overflow用户

发布于 2014-09-10 18:42:39

出自B.Stroustrup的"The C++ Programming Language (第4版)“,描述了C++11:

“要在编译时计算,函数必须适当简单: constexpr函数必须由单个返回语句组成;不允许循环,也不允许局部变量。此外,constexpr函数不能有副作用。”

这意味着它必须是内联的,没有for、while和if语句和局部变量。副作用也是被禁止的(例如:改变errno)。另一个问题是,大多数数学函数都是FPU指令,不是用纯c/c++表示的(它们是用汇编语言编写的)。这就是为什么非cmath函数被声明为constexpr的原因。

票数 9
EN

Stack Overflow用户

发布于 2017-10-28 00:49:03

从这个页面上注意到,c++11中的数学函数似乎都没有使用constexpr,而我相信所有这些函数都可以使用。所以这给我留下了两个问题,一个是为什么他们选择不让函数常量表达式。

Sebastian Redl和Adam Szaj很好地回答了这一部分,所以不会再增加任何东西。

对于像sqrt这样的函数,我可能会写我自己的常量

,但是像sin或cos这样的东西会更复杂,所以它就在附近。

是的,你可以通过使用这些函数的泰勒级数展开来编写你自己版本的constexpr sin,cos。看一下这个非常酷的github代码库,它实现了几个数学函数,如常量表达式函数Morwenn/static_math

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17347935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档