compile-time-constant相关内容

是否“int size = 10;"?产生一个常量表达式?

以下代码在 gcc 4.8 和 Clang 3.2 下编译: int main(){整数大小 = 10;int arr[大小];} C++ 标准的 8.3.4/1 规定数组的大小必须是一个整数常量表达式,而 size 似乎不是.这是两个编译器中的错误,还是我遗漏了什么? 最新的 VC++ CTP 拒绝带有这个有趣消息的代码: 错误 C2466: 无法分配常量大小为 0 的数组 有趣 ..

如何在 C# 中声明一个常量 Guid?

是否可以在 C# 中声明常量 Guid? 我知道我可以声明一个static readonly Guid,但是有没有一种语法可以让我编写const Guid? 解决方案 没有.const 修饰符仅适用于“原始"类型(bool、int、float、double、long、decimal、short、byte)和字符串.基本上任何你可以声明为文字的东西. ..
发布时间:2022-01-23 23:43:20 C#/.NET

在 Java 案例语句中使用变量

我正在为计算器制作表达式解析器.表达式将包含一个变量,例如,用户可以输入“x + 2"或“y^2".我有一个switch语句,switch语句中的一种情况在检测到变量时会执行某个动作: case 变量符号:if (表达式.长度() == 1){范围结果 = x1;打破外部;}varFlag = 真;varPos = 表达位置;休息; 最初,我在上面的例子中硬编码了一个值'x',但我想让用户选择 ..
发布时间:2022-01-19 11:05:34 Java开发

为什么在 Haskell 编译时不计算(常量)表达式?

我目前正在学习 Haskell,但有一件事让我感到困惑: 当我构建一个复杂的表达式(其计算需要一些时间)并且该表达式是常量(意味着它仅由已知的硬编码值构建)时,该表达式不会在编译时计算. 来自 C/C++ 背景的我已经习惯了这种优化. 在 Haskell/GHC 中不执行此类优化(默认情况下)的原因是什么?如果有的话,有什么优势? 数据树 a =空树|节点a(树a)(树a)推导 ..

常量表达式包含无效操作

我有以下代码,其中出现错误“PHP 致命错误:常量表达式包含无效操作".当我在构造函数中定义变量时,它工作正常.我正在使用 Laravel 框架. 我见过这个问题:PHP 错误:致命错误: 常量表达式包含无效操作但是我的代码没有将任何内容声明为静态,因此没有回答我的问题. 解决方案 如上所述 这里 类成员变量称为“属性".您可能还会看到使用其他术语(例如“属性"或“字段")来引 ..
发布时间:2021-12-09 21:32:22 PHP

编译时常量和变量

Java 语言文档说: 如果将原始类型或字符串定义为常量并且值在编译时已知,编译器替换常量名代码中随处可见的值.这称为编译时常数. 我的理解是如果我们有一段代码: private final int x = 10; 然后,编译器会将代码中出现的每个 x 替换为文字 10. 但是假设常量是在运行时初始化的: private final int x = getX();//这里 ..
发布时间:2021-11-25 19:48:13 Java开发

“int size = 10;"产生一个常量表达式?

以下代码在 gcc 4.8 和 Clang 3.2 下编译: int main(){整数大小 = 10;int arr[大小];} C++ 标准的 8.3.4/1 说数组的大小必须是整数常量表达式,而 size 似乎不是.这是两个编译器中的错误,还是我遗漏了什么? 最新的 VC++ CTP 通过这条有趣的消息拒绝了代码: error C2466: 无法分配一个常量大小为 0 的数组 ..

有没有办法在编译时测试一个常量是编译时常量?

鉴于 了解算术是否为 final val 是多么困难表达式将被编译为编译时常量,意外破坏编译时性是多么容易... 谁能想出一种简单的方法来在编译时验证编译器是否确实从复杂的算术表达式创建了一个编译时常量?我猜这可能是某种注释或宏,但也许有更简单的东西.例如,可能类似于: @CompileTime final val HALF_INFINITY = Int.MaxValue/2 有可能. ..
发布时间:2021-07-15 19:37:07 其他开发

是否可以在编译时从环境变量初始化变量?

我想在编译期间初始化一个变量.比如我想在编译代码时将变量VAR初始化为VALUE: 匹配 env::var("VAR") {好的(值)=>println!("Ok {}", value),错误(e) =>println!("Error ({})", e),}; 但是,我想在 no_std 上下文中执行此操作,因此,我无法使用 std::env 访问环境.可以这样做吗? 解决方案 env ..
发布时间:2021-07-13 20:35:09 其他开发

在Java案例陈述中使用变量

我正在为计算器制作一个表达式解析器.表达式将包含一个变量,例如,用户可以输入"x + 2"或"y ^ 2".我有一个switch语句,并且switch语句中的一种情况在检测到变量时会执行某些操作: 大小写变量符号:如果(expression.length()== 1){rangeResult = x1;打破外部;}varFlag = true;varPos = expresPos;休息; 最 ..
发布时间:2021-05-18 20:59:04 Java开发

如何保护枚举分配

我想防止无效的值枚举分配.我知道如果我什至赋值不是枚举也将起作用.示例: 枚举example_enum{ENUM_VAL0,ENUM_VAL1,ENUM_VAL2,ENUM_VAL3};void example_function(void){枚举example_enum the_enum = ENUM_VAL3;//正确的the_enum = 41;//将工作the_enum = 0xBADA5 ..
发布时间:2021-05-04 20:24:54 其他开发

在常数表达式中除以零

如果我用一个常量表达式除以零,我的玩具编译器将崩溃: int x = 1/0; C和/或C ++标准是否允许这种行为? 解决方案 仅出现 1/0 不会使编译器崩溃.最多可以假定该表达式将永远不会被求值,因此,执行将永远不会到达给定的行. 如果保证对表达式进行求值,则该标准对程序或编译器没有任何要求.然后编译器可能会崩溃. 1/0如果经过评估,则仅是UB. C11标 ..

编译时的顶级表达式评估

有什么方法可以确保在编译时对以下表达式进行求值? myList :: [Int] myList = sort [3,2,0,1] 解决方案 如果您要评估的是 TemplateHaskell : {-# LANGUAGE TemplateHaskell #-} module Sort where import Data.List import Language.Haskell. ..
发布时间:2020-11-22 07:12:26 其他开发