问题标签 [constant-expression]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4761 浏览

java - 为什么 Java 常量除以零不会产生编译时错误?

可能重复:
1/0 是合法的 Java 表达式吗?

为什么这段代码会编译?

如果我查看编译的类文件,我可以看到 B 已被评估为 30,而 A 仍然是 7/0。

据我了解JSL,除以零的表达式不是常数。

参考:JLS 15.28

我的上述陈述是由于这一行:

编译时常量表达式是表示原始类型值的表达式

因此除以零不会被评估为原始值。

我真正不明白的是为什么编译器仍然允许这样做?为了清楚起见,我上面的代码使用“java.lang.ExceptionInInitializerError”使运行时崩溃

在我看来,编译器威胁任何最终的静态变量作为常量并评估它的编译时间。这意味着编译器已经尝试评估 A,但由于它是除以零,它就让它通过。没有编译时错误。但这看起来非常非常奇怪......编译器知道它是除以零并且它会在运行时崩溃,但它不会标记编译错误!

谁能向我解释为什么?

0 投票
5 回答
725 浏览

c++ - static const 的地址不是 const 表达式吗?

我虽然静态地址是一个常量表达式,如下例所示,但我得到一个编译器错误(或者这对 C++0x 来说是新的吗?)

0 投票
2 回答
2554 浏览

c++ - 不能出现在常量表达式中

在以下 c++ 程序中:

我收到错误消息double log(double)' cannot appear in a constant-expression。既然我在前面放了一个整数,为什么会出现这个问题?我应该如何解决这个问题?

0 投票
3 回答
9559 浏览

string - 如何在 TVarRec 中设置字符串(或 AnsiString)常量?

我想将格式化参数传递给ArgsFormat函数。我找到了一些例子,但我不知道如何在TVarRec成员中分配字符串常量。以下代码在编译时失败E2089 Invalid typecast

谁能建议我如何将字符串(或 AnsiString)常量设置为 TVarRec 成员?我正在使用德尔福 2009。

非常感谢

0 投票
1 回答
2707 浏览

c# - 使用字符串值创建 lambda 表达式 ConstantExpression

我想创建提供属性名称、值(作为字符串)和属性类型(作为类型)的 lambda 表达式。

问题Expression.Constant(value1, propertyType);
在于传递给 Foo 的行 value1 是字符串。并且必须解析为“未知”类型

0 投票
3 回答
1911 浏览

c++ - 三元运算符的指针转换问题

我知道三元运算符有一些令人惊讶的限制,但我有点困惑,这无法为我编译:

显然,这是显示问题所需的最低限度。错误是:

编译器是低于 100% 的 Embarcadero C++Builder 2010,因此编译器错误远非不可能......

注意:修改括号以避免混淆我的意图。

注意 2:我对自己是如何得出这个结构感到有些困惑,所以这是我的借口:我在类似 的行上遇到了一些编译错误a = b? c : d,其中 b、c 和 d 都是复杂的表达式. 为了缩小范围,我将candd替换为NULLs 以检查是否b是罪魁祸首。在这一点上,一切都在手推车中陷入了困境。

0 投票
3 回答
4576 浏览

c++ - 为什么常量指针不能是常量表达式?

以下程序编译:

然而,这个没有,这对我来说是一个惊喜:

替代示例:

我得出的结论是,指针不能是常量表达式,无论它是否为 const 并用常量表达式初始化。

问题:

  1. 我的结论是真的吗?
  2. 如果是这样,为什么指针不能是常量表达式?如果没有,为什么上面的程序不能编译?
  3. C++0x(C++11,如果你愿意的话)会改变什么吗?

感谢您的任何见解!

0 投票
1 回答
465 浏览

c++ - 必须将常量表达式评估为整数类型吗?

可以说我有以下内容:

str被认为是一个常量表达式吗?

从许多 C++ 书籍中,似乎必须将常量表达式评估为整数类型。

0 投票
2 回答
1933 浏览

c - 如何检查参数是否是 C 预处理器宏中的整数常量表达式?

我目前正在清理现有的 C 库以无耻地发布它。

预处理器宏用于在编译时NPOT为给定的整数常量表达式计算二的下一个更大的幂。该宏通常用于直接初始化。对于所有其他情况(例如使用可变参数),有一个具有相同功能的内联函数。

但是如果用户传递一个变量,算法就会扩展为一大段机器代码。我的问题是: 我可以做些什么来防止用户向我的宏传递除整数常量表达式之外的任何内容?

我已经尝试过的:

  1. 将宏定义为#define NPOT(x) complex_algorithm(x ## u). 它仍然可以工作并且抛出一个 - 即使几乎没有帮助 - 变量参数的编译器错误。除非没有像 iu 这样的变量……脏的,危险的,不要它。
  2. 文档,不适用于大多数用户。
0 投票
2 回答
606 浏览

c++ - 为什么函数地址不是常量表达式

有没有办法在常量表达式中使用函数地址?

这不会编译。

错误 C2057:预期的常量表达式

这背后的意图是我想在编译时比较两个函数地址。