问题标签 [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.

0 投票
1 回答
918 浏览

c++ - 静态大小的 valarray 实现

我正在寻找一个静态大小的std::valarray实现。

自己实现应该很容易,但我需要 constexpr 操作(求和、减法等),这有点无聊/容易出错,所以我在这里问是否有流行的实现。

如果我必须自己实现这个,你认为在这种情况下表达式模板值得吗?

0 投票
1 回答
616 浏览

c++ - 使用用户定义的文字初始化 constexpr 数组

简化版

这不会飞,因为在定义数组的那一行不理解文字。但是自由文字函数不能更早移动,因为那时 C 是未知的。

有没有不涉及在代码中添加可变参数模板或类似可怕的东西的解决方案?

0 投票
2 回答
347 浏览

c++ - constexpr :文字类类型复制行为

让我们看下面的代码:

以下两行:

在下产生以下错误g++ 4.7

未定义对“test::USER”的引用

我知道没有test::USER. (该行是故意注释的)


我有两个问题:

  1. 为什么需要显式实例test::USER而无需显式实例test::NATIVE来调用函数pass_by_copie

  2. 为什么我可以pass_by_rvalue_ref通过显式创建临时副本来调用,而编译器在调用时test::USER无法(或不想)自己隐式创建相同的副本?pass_by_copietest::USER

谢谢

0 投票
1 回答
2585 浏览

c++ - 在 C++ 中模拟编译时反射

我有以下结构:

我想以字符串名称的constexpr方式选择其中一个成员,例如

getMember 是constexprfunction/struct/macros/whatever 有问题和表达式应该(我希望它是)优化为 simple auto& member = instance.firstMember;。我的愿望是能够getMember从另一个constexpr函数调用,这反过来又是计算特定成员的名称——>某种编译时反射。

我知道,C++ 中没有反射,因此可以以某种方式注册(部分专门化?使用一些宏魔术?)有问题的结构成员的名称,例如:

我想要的只是编译时优化并且在运行时什么都不做。这在 C++11 中可行吗?如何实现?

0 投票
3 回答
124591 浏览

c++ - 函数内的静态 constexpr 变量是否有意义?

static如果我在函数中有一个变量(例如,一个大数组),那么同时声明它是否有意义constexprconstexpr保证数组是在编译时创建的,所以static没用吗?

static实际上在生成的代码或语义方面做了什么吗?

0 投票
3 回答
2733 浏览

c++ - 编译时类型转换检查(constexpr 和用户定义的文字)

更新:我在下面发布了我自己的答案, 这里有一个更长的版本:http: //scrupulousabstractions.tumblr.com/post/38460349771/c-11-type-safe-use-of-integer-user-defined-文字

问题:

我制作了一个简单的constexpr用户定义文字_X,将值作为 unsigned long long 获取(这就是数字用户定义文字的工作方式:http ://en.cppreference.com/w/cpp/language/user_literal ),然后我制作确保该值适合带符号的 long long。

这一切都很好(太大的值会导致编译错误),但只有当我明确创建一个变量时

相反,如果我写一些典型的东西,比如

测试不在编译时执行。

  • 如果将 constexpr 函数分配给 constexpr 变量,它们是否仅在编译时执行?(我在标准中找不到)

  • 是否有可能实现_X我正在寻找的安全行为?

完整示例:

哦,供参考:我用的是gcc4.7.2。

0 投票
3 回答
2469 浏览

c++ - 为什么我的 constexpr 函数不能返回 lambda?

我发现这段代码不起作用:

它给了我错误

这是为什么?我不是在这里称呼它。

直接方法有效:

我将 MinGW 与 g++ 版本 4.7.2 一起使用。

0 投票
1 回答
1730 浏览

c++ - 具有类成员和 constexpr 链接时优化的 C++11 枚举

在我的项目中,我有很多枚举需要具有与枚举成员关联的附加属性以及与枚举类型关联的辅助静态方法。

据我所知,标准枚举类 MyItem {...} 是不可能的,因此对于我项目中的每个枚举类,我都有一个辅助类 MyItemEnum,它封装了这些辅助静态方法并实例化了本身,这样我就可以访问他们的方法以获得额外的属性。

下面举个例子(尽可能简化,但我相信要讨论的所有功能都保留在那里)。

我的项目.h

我认为含义很明显,我不需要在此处提供 .cpp 部分...当我需要访问扩展功能时,我使用 MyItem 作为要在接口和 MyItemEnum 中传递的参数。

我的第一个问题是,上面的方法可以吗,还是我应该考虑完全不同的东西?

我的第二个问题涉及我尝试使用 constexpr 对这个枚举进行优化:

它可以编译,但显然 constexpr 没有机会被使用,因为如果我访问:

所以编译器不知道 Item1 用什么值来实例化。 在链接时间优化期间,上面的表达式是否有可能被评估为 constexpr? 或者我可以使用

这将激活 constexpr 编译时优化,但我担心在某些情况下,当 constexpr 无法在编译时评估时,编译器将不得不创建 MyItemEnum 的本地实例(而不是使用对单个全局的引用静态实例)并且我担心这可能会导致性能损失(我的真实枚举具有比单个成员更多的属性,因此本地实例化可能需要一些时间?)。这是一个合理的担忧吗?

0 投票
10 回答
279081 浏览

c++ - `constexpr` 和 `const` 之间的区别

constexpr和有什么区别const

  • 我什么时候可以只使用其中之一?
  • 我什么时候可以同时使用,我应该如何选择一个?
0 投票
1 回答
201 浏览

c++ - 编译器可以忽略对 constexpr 函数中“未采用”分支的评估吗?

在尝试回答Mehrdad 的问题时,我编写了下面的小函数(在liveworkspace中运行):

existsO(1)在哪里)

虽然编译非常慢(在 liveworkspace 上),并且尝试使用广泛的范围完全失败,编译器崩溃([0, ~0u]不起作用......)。

我相信我设法正确地实现了递归(我很高兴被反驳),但是......

因此问题是:在这里评估各种三元运算符调用时,编译器可以省略未采用分支的计算吗?