定义隐式C ++ constexpr样式编译时评估的规则

时间:2018-03-06 18:19:21

标签: language-design

在阅读并观看有关C ++ constexpr的讨论后,我想:

  

太酷了!

作为一名语言书呆子,我考虑过定义一种新的编程语言,并隐含着constexpr这个概念。含义没有constexpr个关键字。据我所知,在编译时评估constexpr的一般规则是:

  1. 必须使用constexpr关键字声明函数或变量。
  2. 如果是函数,则必须在编译时知道其参数。如果它是变量,则必须在使用编译时已知的值声明时进行初始化。
  3. 编译时需要constexpr函数/变量的值,否则允许编译器将其推迟到运行时。
  4. 但是让我们说删除条件1和3.然后编译器会在编译时评估它可以做的任何事情。但在某些情况下,您可能会得到错误的结果。这是一个例子:

    var file = new File("Data.txt");
    ...
    ...
    

    在这种情况下,路径在编译时是已知的,因此在编译程序的机器上搜索文件而不是用户的机器。在某些情况下,这可能是程序员需要的,但往往不是。

    所以问题是:是否可以定义一组附加规则,以便编译器能够区分?

0 个答案:

没有答案