compile-time 相关问题

指的是在编译源代码时可以推断或知道的信息,而不是只能在运行源代码时推断出的信息。不要使用此标记来解决编译源代码所需的时间。

C++ 模板参数排序

我正在寻找模板代码,通过其静态成员函数 static constexpr int getType() 的返回值对模板参数进行排序,如下所示: #包括 #包括<

回答 1 投票 0

对 2D 数组的重叠矩形切片求和

我需要计算多个总和,每个总和位于二维数组的轴导向矩形切片上。许多切片会重叠,因此总和中会有许多共享项。至

回答 1 投票 0

函数重载取决于编译时对象状态

考虑有一个简单的类,根据其状态将整数写入 cout: #包括 类 NotAWriter{ 民众: NotAWriter& 运算符<<(const int& arg) { ...

回答 1 投票 0

是否可以在内联方法或子句中发出动态生成的编译器错误消息?

通过方法上下文参数调用实例允许自定义错误消息,以声明方式使用 @implicitNotFound 注释参数,这需要一个文字字符串

回答 1 投票 0

在编译时或运行时检查linux版本

我使用Linux 2.1.57中引入的函数prctl。 我执行以下操作: // 函数 'prctl' 仅适用于 Linux,并在 版本中引入 #ifdef __linux__ #如果 LINUX_VERSION_CODE >=

回答 1 投票 0

旧版 G++ 的常量表达式的表达式编译时检查

我有以下宏用于某些编译时检查: /* 表达式内编译时检查计算结果为 0 */ #ifdef __cplusplus 模板 结构 Chk_sa; 模板 <> 结构 Ch...

回答 1 投票 0

如何使用 C++ constexpr 函数返回编译常量字符串文字

我有一个 constexpr 函数,我试图从 __FILE__ 宏中删除文件名,即删除除路径之外的所有内容。为此,我草拟了这个基本函数,并将其设为 constex...

回答 3 投票 0

有没有办法构建 C++ 自定义限定符?

有没有办法实现自定义类型限定符(类似于const)?我只想允许在具有相同

回答 2 投票 0

Swift 编译速度慢

我有大约 6 个 swift 文件,其中导入了三个 iOS 框架,编译我的项目大约需要 10-15 秒,非常慢。 我可能已经将其范围缩小到我的专业版中的单个快速文件...

回答 1 投票 0

将数据放置在由常量算术表达式给出的地址处

上下文 我的团队将我们的项目从使用 Arm 编译器用于嵌入式 5 升级到嵌入式 6。在我们的代码中,我们将数据放置在 RAM 中的特定位置,如下所示: #定义 RAM_START_ADDR 背景 我的团队将我们的项目从使用 Arm 编译器用于嵌入式 5 升级到嵌入式 6。在我们的代码中,我们将数据放置在 RAM 中的特定位置,如下所示: #define RAM_START_ADDR <some constant> #define OFFSET <some other constant> ... volatile my_datatype_t __attribute__((at(RAM_START_ADDR + OFFSET))) var = ...; 但由于某种原因,Embedded 6 不再支持__attribute__((at(<addr>))),相反,我们需要使用__attribute__((section(".ARM.__at_<addr>")))。您可能已经注意到,我们正在处理的地址是一个算术表达式,__attribute__(section) 不支持该表达式,它需要一个数字字符串参数。 ARM 确实提供了一种解决方法,即 volatile my_datatype_t * const var = (volatile my_datatype_t *) (RAM_START_ADDR + OFFSET); 不同的是,当编译时,它不会为 var 分配空间,而是覆盖 RAM_START_ADDR + OFFSET 处的任何数据。还没有问 ARM 如何实现这一点,但我不相信除了他们已经提供的不起作用的解决方法之外我们还能得到任何东西。 问题 有没有办法在编译时计算常量算术表达式并将其格式化为字符串?如果是这样,那么我们仍然可以使用 __attribute__((section)) 并将数字字符串传递给它。 我做了很多研究,似乎没有一种方法可以定义宏,以便对表达式进行求值并且可以将值作为标记或字符串或任何其他内容进行访问。 你运气不好。这是一个预处理器,如果您想添加任何内容,则必须对所有可能的组合进行硬编码。这可以使用脚本生成,或者您可以尝试搜索像 boost 这样的现有项目。 // Add two numbers and output them in hex #define ADDHEX_1_1() 2 #define ADDHEX_1_2() 3 // .... few billion lines later #define ADDHEX_123_456() 234 #define CONCAT4(a, b, c, d) a##b##c##d #define XCONCAT4(a, b, c, d) CONCAT4(a, b, c, d) #define STRING(x) #x #define XSTRING(x) STRING(x) #define RAM_START_ADDR 123 #define OFFSET 456 #define AT XSTRING(XCONCAT4(ADDHEX_, RAM_START_ADDR, _, OFFSET)()) #include <stdio.h> int main() { puts(".ARM.__at_" AT); } 您可以使用 Boost 预处理器库来实现这一点:

回答 1 投票 0

constexpr 函数何时在编译时求值?

既然声明为 constexpr 的函数有可能在运行时被调用,那么编译器根据什么标准决定是在编译时还是在运行时计算它呢? 你...

回答 3 投票 0

有没有有效的方法来断言 constexpr-if 分支已执行?

int f(auto obj) { if constexpr (HasFastGetData) { 返回 obj.FastGetData(); } 别的 { 返回 obj.GetData(); } } int main() { B 对象; f(对象); ...

回答 1 投票 0

C++ 在编译时知道给定类型的对象数量

我想注册给定类的所有对象,以便稍后我可以拥有迭代它们的静态方法。我想出了下面的解决方案。我的想法是我将提供这个课程...

回答 2 投票 0

非类型模板参数的静态存储持续时间和生命周期是多少以及如何将其用于编译时计算

C++ Weekly - Ep 313 - 我花了 5 年时间才解决的 constexpr 问题! Jason Turner 演示了几种编译时技术,以便在编译时构造 std::string 然后传递它......

回答 1 投票 0

在C/C++编译时确定核心数

在GCC下的Linux中的C/C++中,有没有办法确定目标机器在编译时有多少个物理核心? 我知道其他方法,例如 C++11 中的 std::thread::hardware_concurrency() 或

回答 1 投票 0

Java 编译时替换(带注释的方法/满足条件的方法)

我可以想象这是不好的做法,但这纯粹是为了一个私人项目并作为我自己的练习。 我有一个类,它有很多不同的静态方法。它们用于测试一些东西

回答 1 投票 0

在编译时打印类型的名称而不中止编译?

在这个问题中: 在编译时打印模板类型名 我们有一些关于如何让典型的 C++ 编译器在编译时打印类型名称的建议。然而,他们依赖于 trigg...

回答 3 投票 0

线程安全编译时数组

我需要通过访问/更改给定索引处的数组以及迭代数组的元素来对 std::array 进行操作。 假设数组元素是线程安全对象的shared_ptr...

回答 1 投票 0

为什么C++中的堆栈内存使用量是在编译时确定的?

在得知 VLA(可变长度数组)与 C++ 不兼容后,我第一次开始深入这个兔子洞。这是因为可变长度的数组不会有 s...

回答 1 投票 0

编译时初始化成员数组

是否可以在编译时初始化array_object的idx值,使得member_array[0].idx = 0;成员数组[1].idx = 1; ...member_array[array_size-1].idx = array_size-1。价值

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.