首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么要指定Fmtflag两次-一次作为枚举的一部分,另一次作为静态常量变量

在 C++ 中,Fmtflag 是一个枚举类型,用于指定格式化输出的标志。在定义枚举类型时,可以指定多个枚举值,并且每个枚举值可以被赋予一个整数常量。例如,我们可以定义如下的枚举类型 Fmtflag

代码语言:txt
复制
enum Fmtflag {
    DECIMAL = 0,
    HEX = 1,
    OCTAL = 2,
    SCIENTIFIC = 4,
    FIXED = 8
};

上述代码中,Fmtflag 定义了五个枚举值,分别是 DECIMALHEXOCTALSCIENTIFICFIXED,并且给每个枚举值指定了一个整数常量。

除了枚举值之外,有时候还需要定义一些静态常量变量来表示某些特定的标志位。在这个问题中,Fmtflag 可能同时充当了枚举值和静态常量变量。

具体来说,指定 Fmtflag 两次的目的是为了实现以下两个功能:

  1. 作为枚举的一部分:通过将 Fmtflag 作为枚举类型的一部分,可以将其作为参数传递给函数或方法,从而指定格式化输出的标志。例如,可以将 Fmtflag 作为函数的参数来指定数字输出的格式(十进制、十六进制等)。
  2. 作为静态常量变量:通过将 Fmtflag 定义为静态常量变量,可以直接使用 Fmtflag 来表示特定的标志位。这样做的好处是可以提高代码的可读性和可维护性。例如,可以使用 Fmtflag::SCIENTIFIC 来表示科学计数法的输出格式。

总结起来,指定 Fmtflag 两次的做法是为了同时满足枚举类型和静态常量变量的需求,以便实现更灵活、可读性更高的代码。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深挖Jvm垃圾收集

Java 中可作为 “GC Root” 对象: 类静态属性引用对象; 常量引用对象; 虚拟机栈中,栈帧中本地变量表引用对象; 本地方法栈中,JNI 引用对象(native方法); 栈中(本地变量表中...不足: 效率问题:标记和清理两个过程效率都不高。 空间碎片问题:标记清除后会产生大量不连续内存碎片,导致以后为较大对象分配内存时找不到足够连续内存,会提前触发另一次 GC。 ?...也就是说,进行可达性分析第一步,就是枚举 GC Roots,这就需要虚拟机知道哪些地方存放着对象应用。...如果每一次枚举 GC Roots 都需要把整个栈上位置都遍历一遍,那可就费时间了,毕竟并不是所有位置都存放在引用呀。...:在多少次 Full GC 后进行一次空间整理(默认是 0,即每一次 Full GC 后都进行一次空间整理) 关于 CMS 使用 标记 - 清除 算法一点思考: 之前对于 CMS 为什么采用 标记

30130

深挖Jvm垃圾收集

Java 中可作为 “GC Root” 对象: 栈中(本地变量表中reference) 虚拟机栈中,栈帧中本地变量表引用对象; 本地方法栈中,JNI 引用对象(native方法); 方法区中...类静态属性引用对象; 常量引用对象; 即便如此,一个对象也不是一旦被判为不可达,就立即死去,宣告一个死亡需要经过两次标记过程。...不足: 效率问题:标记和清理两个过程效率都不高。 空间碎片问题:标记清除后会产生大量不连续内存碎片,导致以后为较大对象分配内存时找不到足够连续内存,会提前触发另一次 GC。...也就是说,进行可达性分析第一步,就是枚举 GC Roots,这就需要虚拟机知道哪些地方存放着对象应用。...:在多少次 Full GC 后进行一次空间整理(默认是 0,即每一次 Full GC 后都进行一次空间整理) 关于 CMS 使用 标记 - 清除 算法一点思考: 之前对于 CMS 为什么采用 标记

30700
  • Java编码规范

    方法名,参数名,成员变量,局部变量都统一使用lowerCamelCase风格。 常量名全部大小写,单词间用下划线隔开,不要嫌名字长。 抽象类使用Abstract或Base开头。...测试类命名以它要测试名开始,以Test结尾。 记住,中括号是数组类型一部分,String[] args,请勿使用String args[]。...POJO类中任何布尔类型变量,都不要加is,否则部分框架会引起序列化错误。 枚举类名建议带上Enum后缀,枚举成员名称需要全部大写,单词间用下划线隔开。...使用entrySet遍历Map集合KV,而不是keySet方式遍历(keySet方式是遍历了2次,一次转换为Iterator对象,另一次是从hashMap中取出key对应value,JDK8,使用Map.foreach...循环体中语句考量性能,以下操作尽量移至循环体外处理,如定义对象,变量,获取数据库连接,进行不必要try-catch操作。 © 著作权归作者所有

    1.2K40

    怎么一本正经地秀技

    静态初始化块 在生成每个对象时候都会执行一次,可以初始化类实例变量。...但是使用final修饰地局部变脸既可以指定默认值,也可以不指定默认值。假如在定义修饰局部变量时没有指定默认值,则可以在后面代码中对该变量赋予一个指定初始值。...,会发现枚举类其实就是在类编译时候,就生成了相对应静态常量,并且构造器是对用户透明,它会自己进行初始化,我们只需要关心我们需要获取什么样枚举对象就可以了。...枚举值(RED...)都是Color类型静态常量,因为枚举类是class,所以在枚举类型中也可以有构造器、方法和数据域,但是枚举构造器是私有的,它会自己调用。...然后调用了EnumvalueOf()方法,此方法是和toString()方法对应,返回带指定名称指定类型枚举常量,所以会输出"BLUE(0,0,255)"。

    32600

    Effective C++ 第一章重点条款学习

    当我们以const替换#define,两种特殊情况值得说明: (1) 定义常量指针 例如若要在头文件内定义一个常量(不变)char *字符串,就必须写const两次 const char* const...myWord = "xxx"; 而对于上述在C++中直接使用一次const即可: const std::string myWord("xxx"); (2)class专属常量 例如:为了将常量作用域(...a:b); } 这样就避免了前面宏替换被累加两次问题. 总结:对于常量,原先写宏用const或者enum来替换,宏函数用inline修饰函数!...非本地静态对象(non-local static object): 静态对象可以是在全局范围定义变量,在名空间范围定义变量,函数范围内定义为static变量,类范围内定义为static变量,而除了函数中静态对象是本地...解决方法: 将全局变量变为本地静态变量 使用一个函数,只用来定义一个本地静态变量并返回它引用。因为C++规定在本地范围(函数范围)内定义某静态对象时,当此函数被调用,该静态变量一定会被初始化。

    1.1K10

    Enum源码解析

    在没有引入 enum 关键字之前,表示可枚举变量,只能使用 public static final 方式。...使用 enum 来表示枚举可以更好地保证程序类型安全和可读性。 enum 是类型安全。除了预先定义枚举常量,不能将其它值赋给枚举变量。这和用 int 或 String 实现枚举很不一样。...* @return 具有指定名称指定枚举类型枚举常量 * @throws IllegalArgumentException 如果指定枚举类型没有指定名称常量,或者指定类对象不表示枚举类型...当一个Java类第一次被真正使用到时候静态资源被初始化、Java类加载和初始化过程都是线程安全。...所以,创建一个enum类型是线程安全为什么枚举实现单例是最好方式 1. 枚举写法简单 2.

    1.1K10

    【C语言进阶】C语言进阶教程:利用结构体、联合体和枚举自定义数据类型

    原因在于,为了访问未对齐内存,处理器需要作两次内存访问;而对齐内存访问仅需要一次访问。 结构体内存对齐是拿空间来换取时间做法。...枚举 C语言中枚举(Enumeration)是一种基本数据类型,它允许程序员为整数指定一个更易读名字。..., Wed, Thur, Fri, Sat, Sun }; 这些枚举常量都是有值,默认从0开始,一次递增1,当然在定义时候也可以赋初值 enum Color//颜色 { RED =...1, GREEN = 3, BLUE = 5 }; 枚举优点 增加代码可读性和可维护性 和#define定义标识符比较枚举有类型检查,更加严谨 防止了命名污染(封装) 便于调试 使用方便,一次可以定义多个常量...枚举使用 enum Color//颜色 { RED = 1, GREEN = 2, BLUE = 4 }; int main() { enum Color clr = GREEN;//只能拿枚举常量枚举变量赋值

    7110

    JVM之字节码执行引擎

    其模型示意图大体如下: 局部变量表 局部变量表是变量存储空间,由方法参数和方法内部定义局部变量组成,其容量用Slot作为最小单位。...我们知道类变量表有两次初始化机会,第一次是在“准备阶段”,执行系统初始化,对类变量设置零值,另一次则是在“初始化”阶段,赋予程序员在代码中定义初始值。...但在大多数虚拟机实现都会做些优化处理,令两部分栈帧出现一部分重叠,这样在进行方法调用中可以共用一部分数据,如下图所示: 动态连接 每个栈帧都包含一个指向运行时常量池中该栈帧所属方法引用,持有该引用是为了支持方法调用过程中动态连接...无论通过哪种方式退出,在方法退出后都返回到该方法被调用位置,方法正常退出时,调用者pc计数器作为返回地址,而通过异常退出,返回地址是通过异常处理器表来确定,栈帧中一般不会保存这部分信息。...两两组合有形成了静态单分派、静态多分派、动态单分派、动态多分派 解析 在Class文件中,所有方法调用中目标方法都是常量池中符号引用,在类加载解析阶段,会将一部分符号引用转为直接引用,也就是在编译阶段就能够确定唯一目标方法

    33820

    一起学Excel专业开发04:Excel应用程序开发好习惯之命名规则

    当然,也许有人会说,一个小程序还要对其运用专门命名规则,太麻烦了。确实,如果你是一次性使用,以后不用管了,可以随便命名。然而,如果你重复使用程序,建议最好使用符合习惯命名规则。...其命名规则一般为,以相关项目名缩写作为前缀;名称一部分为描述性文字,用来标识相同枚举类型;最后一部分为字符串,用来唯一标识特定数值。...例如xlPaper11X17,xl前缀代表相关项目前缀缩写,Paper标识枚举类型,11X17代表纸张尺寸。 模块、类和用户窗体 M:作为标准代码模块名称前缀。 C:作为类模块名称前缀。...,DayType描述该枚举类型作用,最后后缀描述了各枚举常量含义。...说明:如果没有指定枚举成员值,那么会自动给第一个成员赋值为0,其他枚举成员值依次递增1。也可以指定枚举成员常量值。 过程名 ShutdownApplication过程:关闭应用程序。

    63420

    C - 基础总结

    声明一个变量,实际上就是在内存中开辟一块指定类型和别名空间 5. 内存中五大区域 内存当中分为五大区域 为什么分区个区域?...BSS段 - 用来存储未初始化全局变量静态变量,声明一个全局变量,如果我们没有初始化,在程序运行最开始时候,这个变量没有初始化时是存储在BSS段,初始化之后,全局变量静态变量就会被放到常量区。...数据段/常量区 - 用来存储已经初始化全局变量静态变量,还有常量数据 代码段 - 用来存储程序代码/指令。...static和extern修饰局部变量 static修饰局部变量,那么这个变量就叫做静态变量静态变量不在存储在栈区,而是存储在常量区中,当函数执行完毕之后,这个静态变量不会被回收。...当第一次执行这个函数时候,就会将这个静态变量声明在常量区,第二次去执行这个函数时候,声明静态变量这句话就不会在执行了,而是直接略过,直接使用静态变量值。

    1.2K110

    Java 枚举

    Java 枚举 枚举 enum 什么是枚举类: Java 枚举是一个特殊类,一般表示一组常量 比如: 一年 4 个季节,一个年 12 个月份,一个星期 7 天,方向有东南西北等… 类似这种当一个变量有几种固定可能取值时...~ Java中被 Final修饰变量几种赋值方式 Final 表示"最后、最终"含义,变量一旦赋值后,不能被重新赋值 被 Final 修饰实例变量必须显式指定初始值 Final 修饰符通常和...static 修饰符一起使用来创建类常量 **非静态Final赋值有三种:**定义初始化、非静态代码块、构造方法 /*定义初始化时进行赋值 在声明对象时直接赋值,赋值后就不可变了,这种是最容易想到...final Integer num = 10 ; } /* 静态代码块 用static{}包裹起来代码片段,只会执行一次 静态代码块优先于构造块执行. */ public class FinalTest...枚举对象,Object> 为什么使用枚举

    8810

    掌握Java枚举这几个知识点,日常开发就够啦

    JDK5引入了一种新特性,关键字enum可以将一组具名有限集合创建为一种新类型,而这些具名值可以作为常规程序组件使用,这就是枚举类型。...equals(); 返回布尔值,enum实例判断相等 compareTo() 比较enum实例与指定对象顺序 values(); 返回enum实例数组 valueOf(String name) 由名称获取枚举类中定义常量...Shrubbery是java.lang.Enum子类。 Shrubbery定义枚举值都是public static final修饰,即都是静态常量。...因此,枚举类方法values()返回enum枚举实例数组是不是豁然开朗啦。 四、枚举优点 枚举类有什么优点呢?就是我们为什么选择使用枚举类呢?...并且它变量都是public static final修饰,都是静态变量。 当一个Java类第一次被真正使用到时候静态资源被初始化、Java类加载和初始化过程都是线程安全

    87520

    【小家Java】深入理解Java枚举类型(enum)及7种常见用法(含EnumMap和EnumSet)

    什么是枚举类型 枚举类型是Java 5中新增特性一部分,它是一种特殊数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊约束,但是这些约束存在也造就了枚举类型简洁性、...int枚举模式,这样定义方式并没有什么错,但它存在许多不足: 如在类型安全和使用方便性上并没有多少好处 如果存在定义int值相同变量,混淆几率还是很大,编译器也不会提出任何警告 操作上,比如我拿到所有的枚举值...,或者根据枚举值拿到具体名字等都非常不方便 因此这种方式在枚举出现后并不提倡,现在我们利用枚举类型来重新定义上述常量,同时也感受一把枚举定义方式,如下定义周一到周日常量 //枚举类型,使用关键字...现在好了,有了枚举,可以把相关常量分组到一个枚举类型里,而且枚举提供了比常量更多方法。...创建EnumSet并不能使用new关键字,因为它是个抽象类,而应该使用其提供静态工厂方法,EnumSet静态工厂方法比较多,如下: // 创建一个具有指定元素类型空EnumSet。

    5.2K42

    Java基础重构-面向对象

    而我们非static 修饰变量它属于是实例变量,所以stati成员不能直接 访问静态成员 为什么同一类里,静态和非静态方法可以相互调用?...为什么被final修饰变量 被称为 执行宏替换 变量?...接口里可以包含成员变量(只能是静态常量),方法(只能是抽象实例方法,类方法或默认方法),内部类(内部接口,枚举) 接口支持多继承。 谈谈你对接口和抽象类理解?...接口里不能定义静态方法,抽象类里可以定义静态方法。 接口里只能定义静态常量,不能定义普通成员变量;抽象类既可以定义普通成员变量,也可以定义静态常量。...非静态内部类不能拥有静态成员。 为什么静态内部实例方法也不能访问外部类实例属性? 因为静态内部类是外部类类相关,而不是外部类对象相关

    64830

    细说枚举

    枚举是 C# 中最有意思一部分,大部分开发人员只了解其中一小部分,甚至网上绝大多数教程也只讲解了枚举一部分。那么,我将通过这篇文章向大家具体讲解一下枚举知识。...不管使用哪种方式都需要用关键字 enum 来标识这个类型为枚举类型,并且枚举值都是作为整数常量来实现。下面我们就来看一下这两种方式怎么定义枚举。普通方式是我们经常用到,也是默认方式。...3 ,这时第二个枚举整数常量就不是 1 了,而是 4 ,因为当枚举值没有显示赋值时,将会按照上一个枚举值对应整数值加 1 来作为自己本身对应整数值。...对于枚举类型变量,值不限于声明中命名值,因此值能转换成基础类型,那么就能转换为枚举类型。之所以这么设计是因在以后 API 中有很大可能在不破换老版本同时为枚举添加新值。...,这是为什么呢。

    1.9K10

    C++ Primer Plus 第四章 复合类型 学习笔记

    3.如果只对数组一部分进行初始化,则编译器把其他元素设置为0。...也可以只显示定义其中一些枚举值。 如果第一个变量未初始化,默认为0。后面没有被初始化枚举值将比其前面的枚举量大1。也可以创建多个值相同枚举量。...enum {zero,null = 0,numero_one,one = 1}; 6.2 枚举取值范围 每个枚举都有取值范围上限,通过强制类型转换,可以将取值范围中任何整数值赋给枚举常量,即使这个值不是枚举值...对于指针数组使用,直接可以按照普通数组使用即可。 7.6 使用new和delete时,遵循规则 不要使用delete来释放不是new分配内存。 不要使用delete释放同一个内存块两次。...静态存储 变量称为静态方式 在函数外面定义 在声明变量时使用关键字static。 整个程序执行期间都存在存储方式(存在于程序整个生命周期)。

    1.8K00

    C语言标准定义32个关键字保姆级讲解

    enum 枚举名 { 枚举值表 }; 枚举值表中所有可用值是枚举变量可以使用值,也成为枚举元素。枚举值是常量,在程序中枚举值不能作为左值(不能给枚举值使用赋值语句赋值)。...,但是宏定义常量枚举常量是有区别的,#define 宏常量是在预编译阶段进行简单替换,而枚举常量则是在编译时候确定其值。...,本就不应该关心这块内存是什么类型,只要我们通过函数参数告诉编译器我们操作这块内存大小就行了,这也是C语言内存操作函数精髓所在,并且也体现了作为一个内存操作API统一性。...因为static修饰静态变量存放在内存静态区,所以函数运行结束这个静态变量也不会被销毁,函数下次被调用时这个变量值依然存在,也就是我们说静态局部变量只能被初始化一次,并且有记忆功能,下次调用函数时可以使用上次函数调用结束时静态局部变量值...我们知道,定义数组时指定数组大小,以便于编译器分配内存。在C语言中编译不通过也就证明了const定义依然是变量,而不是常量

    10010

    java编程思想第五章初始化与清理

    5.6成员初始化:   所有变量在使用前都必须进行初始化。   可以直接指定初始化,也可以使用构造器初始化。   注:在类内部,变量定义顺序觉得其初始化顺序,变量初始化会优先于方法调用。...5)执行指定初始化(这里指的是对基本数据类型和引用数据类型初始化,在Java中总是会优先去加载成员变量,不论成员变量位置在哪里,都是会优先加载)。     6)执行构造器。   ...静态代码块:仅执行一次,当创建类对象或者访问类静态成员时执行。 5.8数组初始化:   数组中引用元素只有在明确指定引用时才算初始化完成。   可变参数列表:注必须放在参数最后一位。...类型...参数名 5.9枚举初始化:   枚举类似的实体是常量,常用大写字母表示。   ...枚举在创建时会写很多方法,如toString()、ordinal()用于表明顺序、以及static values()按常量顺序构成数组等   枚举可以在switch语句中使用。

    56420

    C++函数模板详解

    (a) : (b)) 在复杂调用情况下,它行为是不可预期,这是因为它两个参数值都被计算两次. 一次是在a 和b 测试中另一次是在宏返回值被计算期间....: elem_cnt : 5 expecting: 10 min()宏扩展在这种情况下会失败因为应用在指针实参p 上后置递增操作随每次扩展而被应用了两次 二 .解决办法: 函数模板提供了一种机制通过它我们可以保留函数定义和函数调用语义在一个程序位置上封装了一段代码确保在函数调用之前实参只被计算一次...] < min_val ) min_val = r_array[i]; return min_val; } 在程序运行过程中Type 会被各种内置类型和用户定义类型所代替而size 会被各种常量值所取代这些常量值是由实际使用...min()决定记住一个函数两种用法是调用它和取它地址 当一个名字被声明为模板参数之后它就可以被使用了一直到模板声明或定义结束为止模板类型参数被用作一个类型指示符可以出现在模板定义余下部分它使用方式与内置或用户定义类型完全一样比如用来声明变量和强制类型转换模扳非类型参数被用作一个常量值可以出现在模板定义余下部分它可以用在要求常量地方或许是在数组声明中指定数组大小或作为枚举常量初始值...a : b; return tmp; } ③ 模板类型参数名可以被用来指定函数模板返回位 // ok: T1 表示 min() 返回类型 // T2 和 T3 表示参数类型 template T1

    99170

    Java面试之关键字

    在finalize ( )方法中,你指定在一个对象被撤消前必须执行操作。垃圾回收周期性地运行,检查对象不再被运行状态引用或间接地通过其他对象引用。...final:常量 volatile:声明一个可能被同时并发运行几个线程所控制和修改变量 abstract:只有声明部分,方法体为空,具体在子类中完成 transient:(过渡修饰符)指定变量是系统保留...,变量不在是对象持久化一部分,该变量内容在序列化之后无法获得访问 transient关键字只能被修饰变量,而不能修饰方法和类。...也就是说,一个类静态变量只有一份,不管它有多少个对象。类变量或者说静态变量是通过static这个关键字来声明。类变量通常被用作常量静态变量通常通过类名字来进行访问。...为什么静态方法不能访问成员变量(建议自己用代码尝试一下) 成员方法可以访问静态变量静态方法不能访问成员变量原因是因为:被static修饰属性和方法会随着类加载而存在,而非静态成员变量则是在该类被创建对象之后才会初始化

    638100
    领券