问题标签 [constexpr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 在 constexpr 中使用非常量变量?
因此,对于前面关于带有三元运算符的 const/non-const 的问题,以下test
函数是否适用于 C++11 标准:
整个问题是,它_constvar
是 const,并且_var
是非常量。我必须通过相同的函数根据模板参数访问这两个数据,并且我希望在使用 const 时有一个编译时函数。
功能是否test()
满足我的要求?
c++ - constexpr 中使用的非 const :标准是怎么说的?
C++11 iso 标准对这样的表达有什么看法:
_x
是在 a 中使用的非常量constexpr
:它会产生错误,还是会constexpr
被简单地忽略(就像我们传递非常量参数时一样)?
c++ - 类中的 C++ constexpr 成员指针
我正在尝试使用一个类来对模板数据结构的所有参数进行分组,特别是一个侵入式 AVL 树。用户会做这样的事情:
但是MyAvlTreeParams 中的成员指针有问题。此示例演示了它:
这适用于 clang++ 3.1,但 g++ 4.7.2 无法链接错误:
通过在结构 B 的定义之后的某个位置添加以下声明来修复错误(请参阅此问题):
要了解这在我的情况下如何成为问题,每当使用 AVL 树时都需要添加以下所有内容:
如果没有这种信息较少的样板代码,或者有什么不同的方法可以实现分组参数的相同目标(即不仅仅是将所有成员作为模板参数传递),是否有任何方法可以做到这一点?
c++ - 编译时的 C++ constexpr
我是否认为这个函数应该只在编译时评估,或者它是否有运行时成本?
c++ - 在 constexpr 抛出的异常中使用副作用是否合法?
通常, constexpr 必须没有副作用。但是,我刚刚发现可以在抛出异常的构造函数中使用副作用。该技术可用于模拟 constexpr 函数的 assert(),如下面的程序所示。
我用 g++ 4.7.2 和 clang++ 3.1 对其进行了测试。当先决条件失败时,您将获得错误位置和核心转储。
所以它适用于当前的编译器,但它是合法的 C++11 吗?
c++ - 如何在编译时检查两种类型是否相同(如果它与 Boost strong typedef 一起使用则加分)
我想知道是否可以在编译时检查两种类型是否相同。我想出的是(idk,如果它有效,因为它感觉很hackish并且IDK标准很好,所以IDK在测试时要寻找什么)。
用法 :
所以
1)有更好的方法吗?
2)这个函数hack的地址是否保证按标准工作(我敢打赌不是:))?
c++ - 编译器是否被迫拒绝无效的 constexpr?
我确信 (1) 一定会导致编译错误。我很确定(2)不能在编译时被拒绝,尽管它会在运行时失败。
有趣的例子是 constexpr 变量 (3)。在这个简单的例子中,gcc 和 clang 实际上计算表达式,因此会拒绝程序。(错误消息:y 不是常量表达式)。
是否每个 C++11 编译器都被迫拒绝该程序?如果 foo(false) 被更复杂的表达式代替怎么办?
我很惊讶地发现 constexpr 不是图灵完备的,尽管这将是在规范更改之后: 基于 constexpr 的计算图灵完备吗?
也许这与我的问题有关。据我了解,允许编译器将本示例中 constexpr (3) 的实际评估推迟到运行时。但是如果 constexpr 是图灵完备的,我很难相信编译器可以为所有 constexpr 决定是否会抛出异常(这意味着 constexpr 无效)。
c++ - 在可变参数模板上计算函数
我试图找出在可变参数类型列表上实现函数的最惯用方式。例如,计算所有类型的最大大小。我知道有几种方法可以完成这样的任务,但我想知道什么时候选择哪种策略。
这些是我会考虑的机制(可能存在更多,如果有,请提及):
类型特征(最好使用 using 声明简洁):
/li>
/li>constexpr
职能:
我的问题是双重的:
计算的哪些特征决定了选择什么策略?
在每种情况下,上述最大尺寸示例的示例实现如何?
c++ - 连接两个 `const char` 字符串文字
是否可以使用 a 连接两个字符串文字constexpr
?或者换一种说法,可以消除代码中的宏,例如:
更新: using 没有任何问题"\n"
,但是我想知道是否可以使用constexpr
来替换那些类型的宏。
c++ - Why constexpr works for impure functions
while browsing one of my old questions on constexpr I stumbled onto a very(IMHO) important comment. Basically it boils down to : (this is legal C++11 :( )
My question is what is the reason this is allowed by the standard. Since Im a big fan of referential transparency I hope they have a good reason :) and I would like to know it.
BTW there is related Q but most of the A even dont mention pure thing, or when they do they dont specify the reasoning why std allows this. Relation between constexpr and pure functions