【发布时间】:2021-04-20 10:19:13
【问题描述】:
假设我有一个静态函数,它接受一个枚举并返回一个 cstring ptr 用于调试。
该函数可以是 constexpr,但不能保证它总是可以在编译时进行评估。假设它在微控制器上运行,这是来自蓝牙堆栈的信号事件;例如设备连接、断开连接、数据输入等,用于上下文。所以参数在编译时不一定是已知的。
将 cstrings 也定义为 constexpr 与不定义是否有任何价值、意义或区别?
我的意思的一个简明例子:
#include <cstdio>
enum myEnum
{
EVENT1,
EVENT2,
EVENT3
};
static constexpr const char* foo(const myEnum i)
{
// Does having these as constexpr change anything?
/*constexpr*/ const char* text1 = "Text1";
/*constexpr*/ const char* text2 = "Text2";
/*constexpr*/ const char* text3 = "Text3";
/*constexpr*/ const char* textUndef = "TextUndef";
switch (i)
{
case EVENT1:
return text1;
case EVENT2:
return text2;
case EVENT3:
return text3;
default:
return textUndef;
}
}
int main()
{
const char* x = foo(EVENT1);
const char* y = foo(/*some value only known at runtime*/);
printf(x);
printf(y);
return 1;
}
我正在使用 gcc 为嵌入式微控制器编译 cpp17。通常使用 -Og 或 -Os。
【问题讨论】:
-
离题:仅供参考this might be fun to use.
-
看起来很有趣是啊。虽然有很多 std lib 的东西,所以我不会将它用于可部署的代码。
-
另一个问题是使用特定于编译器的 hack 来进行反射,这作为一个练习令人印象深刻,但我不想在任何产品中依赖它。
标签: c++ constexpr constexpr-function