c++有能力实现编译时的 int 对字符串翻译表吗?

2020-03-20 23:35:55 +08:00
 ybw

关键词: 编译时,非运行时

1275 次点击
所在节点    C++
9 条回复
Caturra
2020-03-20 23:49:52 +08:00
constexpr ?
ipwx
2020-03-21 12:25:31 +08:00
std::string 永远要在对上分配内存,而对上分配永远是运行时的。所以,你的需求不可能实现 。
ipwx
2020-03-21 12:25:57 +08:00
对 => 堆
ysc3839
2020-03-21 14:22:23 +08:00
“int 对字符串翻译表”指的是什么呢?
ybw
2020-03-21 16:26:03 +08:00
@ipwx 谁说 std::string 了,字符串字面值,就是分配在静态存储区的。
ybw
2020-03-21 16:27:02 +08:00
@ysc3839 类似于 std::map<int, string>。不过是编译时而不是运行时。
ipwx
2020-03-21 16:35:23 +08:00
@ybw 行吧,那就是 const char*。

但是 int 值域那么大,你打算生成多少容量的翻译表?写一个运行时的 formatInt 也不耗时啊。经济一点,你可以把 0~255,-1,-2 这种常用值的翻译表静态化,剩下的运行时生成不就行了?

如果是有限数量的静态翻译表,写个 python 程序生成一个 const char*[] 不就可以了?
ybw
2020-03-21 16:38:10 +08:00
@ipwx 这和我的问题无关。
ysc3839
2020-03-21 20:49:51 +08:00
@ybw 可以,随手搜了一下就搜到了 https://github.com/mapbox/eternal

下面是测试代码和编译结果
https://godbolt.org/z/z2orb6

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/654741

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX