【问题标题】:Static data definition as language feature作为语言特征的静态数据定义
【发布时间】:2011-03-15 02:00:03
【问题描述】:

我正在用 C++ 编写一个程序,我使用一些常量数据。我在启动时按程序构建该数据,并且再也不会更改它。我知道理想情况下数据应该是二进制文件中的静态数据,但事实并非如此,因为我必须首先构建它们。

在 C++ 中,我可以使用该数据在类中定义 static consts 成员,或者简单地定义全局 consts。通过这样做,我将在二进制文件中拥有静态数据,但是我将无法对它们的内容进行编程。我将不得不在其他地方构建它们并将结果粘贴到代码中。就我而言,这将是一堆在源文件中丑陋且无意义地编码的二进制数据。

所以我开始怀疑,是否有任何语言支持这种功能,使我能够在程序上定义我的静态数据,但在编译时解决它并嵌入到二进制文件中?任何类型的优化都可以处理这些情况吗?如果生成数据的过程/函数不使用外部参数并且具有可预测的结果,则编译器可以使用结果安全地对其进行优化。编译器会走这条路吗?你知道的任何语言都明确地处理了这个问题?

我知道 C 预处理器,但它确实不兼容图灵,而且它的语法不如它是一个告诉它应该在编译时解析的函数修饰符那样有吸引力。

【问题讨论】:

  • 计算数据的过程有多复杂?它一次生成一个元素吗?这将使模板和/或预处理器的工作变得更加容易。

标签: programming-languages macros preprocessor


【解决方案1】:

构建一个程序来生成数据(您已经拥有该数据),使其输出为 C++,将生成添加到您的 Makefile,并将生成的数据与 #include 一起使用。

【讨论】:

  • 这似乎是最理智的方式,如果我不想做模板魔法并扭曲我的大脑。但我仍然认为编程语言缺乏对编译时、可读的图灵完备解决方案的支持......
【解决方案2】:

C++ 模板是图灵完备的,通常用于计算编译时常量。

【讨论】:

  • 有循环、三角函数等等?
  • @Ivella:如果你愿意,你可以写这些东西。原生没有浮点数,但我相信 Boost 有编译时有理数。
  • 你可以用模板做一些非常棒的事情:drdobbs.com/cpp/199500857
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多