小编Bar*_*art的帖子

连续枚举 C++11

如果枚举是连续的,有没有办法在 C++11 中检查?

给出不是的枚举值是完全有效的。是否有像 C++14、C++17 或 C++20 中的类型特征这样的特性来检查枚举是否连续?这将在 static_assert 中使用。

一个小例子如下:

enum class Types_Discontinuous {
  A = 10,
  B = 1,
  C = 100
};

enum class Types_Continuous {
  A = 0,
  B = 1,
  C = 2
};

static_assert(SOME_TEST<Types_Discontinuous>::value, "Enum should be continuous"); // Fails
static_assert(SOME_TEST<Types_Continuous>::value, "Enum should be continuous");    // Passes
Run Code Online (Sandbox Code Playgroud)

c++ c++11 c++14 c++17 c++20

17
推荐指数
2
解决办法
1074
查看次数

STD 中的动态内存分配

经常使用微控制器和 C++,知道我不执行动态内存分配对我来说很重要。但是,我想充分利用 STD 库。确定 STD 中的函数/类是否使用动态内存分配的最佳策略是什么?

到目前为止,我想出了这些选项:

  1. 阅读并理解 STD 代码。这当然是可能的,但老实说,这不是最容易阅读的代码,而且代码很多。
  2. 阅读代码的一种变体可能是让脚本搜索内存分配并突出显示这些部分以使其更易于阅读。这仍然需要弄清楚在哪里使用分配内存的函数,等等。
  3. 只是测试我想使用的内容并使用调试器观察内存。到目前为止,我一直在使用这种方法,但这是一种反应式方法。我想在设计代码时事先知道我可以从 STD 中使用什么。还有什么可以说在某些(边缘)情况下分配了内存。这些可能不会出现在这个有限的测试中。
  4. 最后,可以做的是定期扫描生成的汇编代码以进行内存分配。我怀疑这可以编写脚本并包含在工具链中,但这又是一种反应式方法。

如果您看到任何其他选项或有做类似事情的经验,请告诉我。

ps 目前我主要使用 ARM Cortex-Mx 芯片使用 GCC 进行编译。

c++ embedded arm std cortex-m

13
推荐指数
1
解决办法
459
查看次数

标签 统计

c++ ×2

arm ×1

c++11 ×1

c++14 ×1

c++17 ×1

c++20 ×1

cortex-m ×1

embedded ×1

std ×1