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

当存在与枚举成员同名的局部变量时,如何引用该枚举成员?

当存在与枚举成员同名的局部变量时,可以通过使用枚举类型名称加上作用域解析运算符"::"来引用该枚举成员。

例如,假设有以下枚举类型定义:

代码语言:txt
复制
enum Color {
    RED,
    GREEN,
    BLUE
};

void foo() {
    int RED = 1;
    // 引用枚举成员RED
    Color color = Color::RED;
}

在函数foo()中,存在一个与枚举成员RED同名的局部变量。为了引用枚举成员RED,我们可以使用Color::RED来明确指定引用的是枚举成员。

需要注意的是,如果没有使用作用域解析运算符"::",编译器会优先选择局部变量,而不是枚举成员。因此,在存在同名局部变量的情况下,使用作用域解析运算符来引用枚举成员是一种良好的编程习惯。

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

相关·内容

C++知识总结

*p++和(*p)++区别      *p++是先取值,然后将指针地址执行++操作      (*p)++是先取值,然后对(*p)这个值进行++操作 2.枚举变量enum如何计算 enum{a...因此,参数传递数据较大,用引用比用一般变量传递参数效率和所占空间都好。...结构和联合都是由多个不同数据类型成员组成, 但在任何同一刻, 联合中只存放了一个被选中成员(所有成员共用一块地址空间), 而结构所有成员存在(不同成员存放地址不同)。2....C++规定,一个成员函数被声明为虚函数后,其派生类中同名函数都自动成为虚函数。...通过指针变量调用此虚函数,此时调用就是指针变量指向对象同名函数。 通过虚函数指向基类对象指针变量配合使用,就能方便地调用同一类族中不同类同名函数,只要先用基类指针指向即可。

1K40

C++面试知识总结

栈:执行函数,函数局部变量存储在栈中,执行结束后自动释放内存区域,栈内存分配运算内置处理器指令集中。...一般在编译器里,可以调试枚举常量,但是不能调试宏常量。 枚举可以一次定义大量相关常量,而#define 宏一次只能定义一个。 2.5 内联函数和宏区别 内联函数在编译展开,宏在预编译展开。...操作数是指针,sizeof依赖于系统位数。 操作数具有数组类型,其结果是数组总字节数。 联合类型操作数sizeof是其最大字节成员字节数。...3.11 引用多态关系 引用就是对象别名。 引用主要用作函数形参。 引用必须用引用同类型对象初始化: 引用是除指针外另一个可以产生多态效果手段。...一个基类引用可以指向它派生类实例。 3.12 static成员变量和static成员函数 static数据成员独立于该类任意对象而存在

1.7K41
  • Java 语言基础 (类和对象, 方法和封装, static 关键字和继承, 多态和特殊类)

    空间为方法栈帧, 对应一个调用中方法 栈帧存储了方法参数, 局部变量等数据 JVM 会为每个方法调用分配一个对应空间 某一个方法调用完成后,其对应栈帧将被清除 方法和封装 递归...当局部变量成员变量名相同时, 在方法中会优先使用局部变量(就近原则) 若希望使用成员变量, 则在成员变量前加上 this 前缀, 明确要求变量是成员变量 this 关键字还可以作为方法返回值...成员变量随着类加载准备就绪, 是否创建对象无关 static 修饰成员可以使用"引用."...和普通类一样可以使用 final 或 abstract 可以额外使用 private 或 protected 进行修饰 需要外部类对象来创建对象 访问外部类中本类内部同名成员变量或方法, 需要使用..., 可以通过 new 外部类对象来访问非静态成员 可以直接创建对象 访问外部类中本类内同名成员变量或方法, 需要使用"类名."

    81730

    C++中作用域生命周期

    - 注意:类成员函数可以定义在类体内,即定义在头文件,类被不同源文件包含不会报重定义错误,因为作用域被限制在类体中。...复合数据类型: 复合数据类型包括:数组(type[])、指针(type*)、引用(type&)、枚举(enum)。 如果复合数据类型是构造数据类型参与复合,其作用域构造数据类型一致。...enum枚举类型作用域构造类型相同。 构造数据类型: - 作用域:类型定义所在域,其他文件不可见。 - 生命周期:无(程序运行期一直存在)。...具有自动存储期变量在进入声明变量程序块是被建立,它在程序块活动存在,退出程序块撤销。静态存储期从程序载入运行到程序结束一直存在。...,那么,我们一定要避免函数中使用static变量这样函数被称为:带“内部存储器”功能函数; (5)函数中必须要使用static变量情况:比如某函数返回值为指针类型,则必须是static局部变量地址作为返回值

    1.1K20

    C语言——枚举类型

    一,什么是枚举类型 简单来说,枚举类型就是可以让我们给整数值分配有意义名字,从而使得代码更易读、易维护 二,枚举类型定义和变量声明 1,如何定义和声明 枚举类型定义和变量声明方式也结构体和联合体相似...当我们引用这些变量时候,就会输出他们所代表值,如 #include enum color { red=1, yellow=2, blue=3 }; int main() {...如果我们在创建枚举变量,为未给成员进行初始化赋值,则C语言会自动赋值 遵循:默认从0开始,依次增1 如果只有前几个值,那么后面未被赋值成员也会被自动赋值,遵循依次增1 例子一(不赋值)...3,命名注意事项 同一个程序中不能定义同名枚举类型;不同枚举类型中,也不能存在同名枚举成员。...)存在同名枚举成员 enum color1 { red, yellow, blue }; enum color2 { red, black, white }; 三,对变量进行赋值 1,使用成员赋值

    55411

    C++作用域生命周期

    成员函数: 作用域:类域。 生命周期:无(程序运行期一直存在)。 引用方法:其他文件中要使用点操作符(.)或指针操作符(->)或作用域运算符(::)来引用。 内存分布:代码区。...注意:类成员函数可以定义在类体内,即定义在头文件,类被不同源文件包含不会报重定义错误,因为类体内实现函数具有inline特性。...enum枚举类型作用域构造类型相同。 构造数据类型: 作用域:类型定义所在域,其他文件不可见。 生命周期:无(程序运行期一直存在)。...其中auto和register对应自动存储期,被修饰变量在进入声明变量程序块被建立,它在程序块活动存在,退出程序块撤销。静态存储期变量从程序载入运行到程序结束一直存在。...这样函数被称为带“内部存储器”功能函数; (5)函数中必须要使用static变量情况:比如某函数返回值为指针类型,则必须是static局部变量地址作为返回值,若为auto类型,则返回为野指针

    91932

    怎么一本正经地秀技

    那么,final修饰属性,在哪里声明初始值是有一定规则,具体如下: 修饰类属性:可在静态静态初始化块中声明属性初始值 修饰实例属性: 可在普通初始化块中或者构造器中指定初始值 修饰局部变量...假如在定义修饰局部变量没有指定默认值,则可以在后面代码中对变量赋予一个指定初始值。...这是因为在类FeiJingTaiInner内部类对象中保存了一个它储存外部类对象引用调用非静态内部类实例方法,必须有一个非静态内部类实例,而非静态内部类实例必须寄居在外部类实例里 编译程序,...{ // 内部类可以创建外部类同名成员变量 private String name = "codevald"; public void execute...这样子实际上静态内部类就是一个独立类。 局部内部类 在方法中定义内部类就是局部内部类。局部变量相似的是,局部内部类可以访问当前代码中常量和外部类所有成员

    33100

    设计规则

    本节内容 规则 描述 CA1000:不要在泛型类型中声明静态成员 调用泛型类型静态成员,必须指定该类型类型参数。 调用不支持推理泛型实例成员,必须指定成员类型参数。...无标志特性枚举应通过使用零值来定义成员,这样默认值即为枚举有效值。 如果应用了 FlagsAttribute 特性枚举定义值为零成员,则成员名称应为“None”,以指示枚举中尚未设置值。...编译使用 ObsoleteAttribute 标记类型或成员,将显示特性 Message 属性,这为用户提供有关过时类型或成员信息。...默认情况下,仅两个引用指向同一对象,它们才相等。 CA1047:不要在密封类型中声明受保护成员 类型声明受保护成员,使继承类型可以访问或重写成员。...CA1061:不要隐藏基类方法 如果派生方法参数签名只是在类型方面有所不同,而且基方法参数签名中对应类型相比,这些类型派生方式更弱,则基类型中方法由派生类型中同名方法隐藏。

    2K20

    读书笔记 | 类使用 | Effective Java 3

    可以访问其外部类成员 不能访问方法局部变量,除非是 final 局部变量。...在非静态成员实例方法中,可以调用宿主实例上方法,或者使用限定构造获得对宿主实例引用。...如果嵌套类实例可以与其宿主类实例隔离存在,那么嵌套类必须是静态成员类:不可能在没有宿主实例情况下创建非静态成员实例。...非静态成员类实例和其宿主实例之间关联是在创建成员类实例建立,并且之后不能被修改。通常情况下,通过在宿主类实例方法中调用非静态成员类构造方法来自动建立关联。...正如你所预料那样,关联在非静态成员类实例中占用了空间,并为其构建添加了时间开销。 那么如何使用更好呢?

    38120

    阿里Java编程规约【一】命名风格

    【强制】避免在子父类成员变量之间、或者不同代码块局部变量之间采用完全相同命名,使可理解性降低。...说明:子类、父类成员变量名相同,即使是 public 也是能够通过编译,而局部变量在同一方法内不同代码块中同名 也是合法,但是要避免使用。...【推荐】在常量变量命名,表示类型名词放在词尾,以提升辨识度。...尽量不要在接口里定义常量,如果一定要定义,最好确定常量接口方法 相关,并且是整个应用基础常量。...【参考】枚举类名带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。 说明:枚举其实就是特殊常量类,且构造方法被默认强制是私有。

    63920

    Java思维理清思路

    ,访问,default public protected private 二,非访问,final abstract strictfp 变量:局部变量, 类变量(静态变量), 成员变量(非静态变量) 数组...,数组就是存储在堆上对象,可以保持多个同类型变量 枚举概念为,枚举限制变量只能是预先设定好值,枚举是可以用于单独声明或者声明在类里面,方法,变量,构造函数也可以在枚举中定义....继承是在java中,一个类可以由其他类派生,被继承类为超类,派生类为子类,利用了继承方法,可以重用已经存在方法和属性 接口,是作为对象间相互通信协议,接口是定义要用到方法,方法实现要在派生类...,创建一个对象时候,至少要调用一个构造方法,构造方法名称要和类同名,一个类可以有多个构造方法. this是用来引用当前对象,构造方法之间调用....方法重载是同名不同参. final是用来修饰方法,变量,和类,是最终不可以变. static静态, 静态变量是类, 又叫类变量, 非静态成员属于实例, 静态成员是通过类名直接调用, 而被static

    43410

    第 19 章 特殊工具技术

    第 19 章 特殊工具技术 标签: C++Primer 学习记录 运行时类型识别 枚举类型 类成员指针 ---- ---- 19.1 控制内存分配 使用一条 new表达式string *sp...当我们想使用基类对象指针或引用执行某个派生类操作,并且操作不是虚函数,上面两个运算符,就可以发挥作用。...之相反,在不限定作用域枚举类型中,枚举成员作用域枚举类型本身作用域相同。...默认情况下,限定作用域 enum成员类型是 int;而对于不限定作用域枚举类型来说,其枚举成员存在默认类型,只知道其足够大,肯定能够容纳枚举值。...给 union某个成员赋值之后,其他成员就变成未定义状态了。 union不能含有引用类型成员,除此之外,它成员可以是绝大多数类型。

    74740

    第 19 章 特殊工具技术

    枚举类型 19.4 类成员指针 19.5 嵌套类 19.6 union:一种节省空间类 19.7 局部类 19.8 固有的不可移植特性 ---- 19.1 控制内存分配 使用一条 new表达式...当我们想使用基类对象指针或引用执行某个派生类操作,并且操作不是虚函数,上面两个运算符,就可以发挥作用。...之相反,在不限定作用域枚举类型中,枚举成员作用域枚举类型本身作用域相同。...默认情况下,限定作用域 enum成员类型是 int;而对于不限定作用域枚举类型来说,其枚举成员存在默认类型,只知道其足够大,肯定能够容纳枚举值。...给 union某个成员赋值之后,其他成员就变成未定义状态了。 union不能含有引用类型成员,除此之外,它成员可以是绝大多数类型。

    82850

    后台开发:核心技术应用实践 -- C++

    参数分别如下 sizeof 返回值表示含义如下所述: 数组一一编译时分配数组空间大小 指针一一存储指针所用空间大小(int类型大小,32位机器为4 Byte) 类型一一该类型所占空间大小...因此,参数传递数据较大,用引用比用 一般变量传递参数效率更高,所占空间更少。...受保护成员意思是,不能被外界引用但可以被派生类成员引用。 综上,可以视为基类访问权限派生类继承方式叠加最小访问权限。...而 虚函数 作用是允许在派生类中重新定义基类同名函数,并且可以通过基类指针或引用来访问基类和派生类中同名函数。...使用类私有静态指针变量指向类唯一实例,并用一个公有的静态方法来获取实例。单例模式作用就是保证在整个应用程序生命周期中任何时刻,单例类实例都只存在一个(当然也可以不存在)。

    1.3K10

    08 内部类(嵌套类)

    根据语境不同,这个术语可以指代非静态成员类、局部类或匿名类,但不能指代静态成员类型,因此使用“内部类”这个术语无法区分指代是哪种嵌套类型。...成员内部类还可以通过“外部类.this.xxx”方式引用外部类实例变量和方法,如 Outer.this. action(),这种写法一般在重名情况下使用,如果没有重名,那么“外部类.this. ”...成员原因一样,局部类不能包含静态字段、方法或类。唯一例外是同时使用 static 和 final 声明常量。 接口、枚举类型和注解类型不能局部定义。...局部类和成员类一样,不能与任何外层类同名。 前面说过,局部类能使用同一个作用域中局部变量、方法参数和异常参数,但这些变量或参数必须声明为 final。...方法内部类一样,匿名内部类也可以访问外部类所有变量和方法,可以访问方法中 final 参数和局部变量。 匿名内部类能做,方法内部类都能做。

    66610

    Oracle Java类和对象

    它不能与同一方法或构造函数另一个参数名称相同,也不能是方法或构造函数中局部变量名称。 参数可以某个字段同名。如果是这种情况,则参数被称为阴影字段。...方法将圆引用对象(即myCircle)x和y坐标分别更改23和56。方法返回,这些更改将持续存在。然后,圆被分配给一个新circle对象(x=y=0)引用。...但是,这种重新分配没有永久性,因为引用是按值传递,不能更改。在方法中,圆指向对象已更改,但方法返回,myCircle仍然引用调用方法之前相同circle对象。...不再有对对象引用时,对象可以进行垃圾收集。变量超出范围,通常会删除变量中引用。或者,可以通过将变量设置为特殊值null来显式删除对象引用。...此外,存在字段和方法枚举常量列表必须以分号结尾。 ==注意:枚举类型构造函数必须是包私有或私有访问。它会自动创建在枚举体开头定义常量。不能自己调用枚举构造函数。

    87500

    (还在没有对象而发愁吗,new出来)->Java面向对象入门

    ,我们大致可以把变量分为两大类: 成员变量:直接定义在类中,方法外面,又称之为字段,不是属性 局部变量:除了成员变量外,其他变量都是局部变量,仅仅存在于方法内、代码块、方法形式参数中 2.2、变量初始值...父类构造器,子类也无法继承,因为构造器必须和类名相同 7.3、方法重写 子类存在一个和父类一模一样方法,我们就称之为子类覆盖了父类方法,也称之为重写。...(Animal) 运行类型:对象真实类型(Cat) 编译类型和运行类型不一致时候,多态就产生了 所谓多态就是表示一个对象有多种形态,简单来说就是同一引用类型,由于引用实例不同,对同一方法产生结果也不同...8.2.4.2、强制类型转换 把父类类型对象赋给子类类型变量(前提:对象真实类型应该是子类类型) 需要调用子类特有的方法,必须经过强制类型转换,不过有一个要求:父类必须是真实子类类型才可以转换...this关键字表示当前对象本身,一般用于类内部,其内部存在一个地址,指向当前初始化对象本身 new一个对象时候,实际上产生了两个引用,一个是供Dog内部调用其他成员变量或者成员方法this关键字

    85810

    【笔记】《深入理解C++11》(上)

    但注意右值引用不能被绑定到左值 右值引用能够延长右值声明周期, 常量左值引用属于万能引用, 也能够延迟生命周期, 但是常量左值引用值不能修改所以一般用来减少临时对象开销而已 类没有定义移动构造...最终可以用is_pod::value直接判断是否POD 非受限联合 C++11后, 任何非引用类型都可以成为union成员(包括函数), 因此称为非受限联合 不允许静态成员变量存在 union一些默认函数将被删除..., 例如存在非POD成员且这个成员有非平凡构造函数, 这个union默认构造将被删除 匿名union对外是开放, 因此放在类声明中可以按照构造函数不同而初始化为不同类型, 此时类被称为枚举类...也就是decltype一个const对象, 尽管对象本身const类型能被获取, 但是从这个对象中取出成员const会丢失 5 提高类型安全 强类型枚举 普通枚举enum代表对应到整数值一些名字...而且由于其本质是常量数值原因, enum成员总是可以被隐式转换为整型, 这很容易导致比较两个不同枚举名称出现错误结果 C++11之前会通过类结构将枚举封装, 并建立新转换和比较函数覆盖原先操作

    1.9K20

    C# 7.3新特性一览

    没有接收者,我们只会在一个静态上下文中包含静态成员,否则会同时包含静态和实例成员不确定接收者是实例还是类型,考虑到color-color情况,我们会两者都包含。...方法组包含一些泛型方法,而它们类型参数不满足约束,这些成员会被从候选集中移除。 对于方法组转换,那些返回类型委托返回类型不一致候选方法会被从候选集中移除。...在C# 7.3中,你可以在创建数组对其初始化,就像你对普通数组所做那样。提案没有提供细节,但微软正考虑预初始化一个主数组,函数被调用时可以快速复制。...没有接收者,我们只会在一个静态上下文中包含静态成员,否则会同时包含静态和实例成员不确定接收者是实例还是类型,考虑到color-color情况,我们会两者都包含。...方法组包含一些泛型方法,而它们类型参数不满足约束,这些成员会被从候选集中移除。 对于方法组转换,那些返回类型委托返回类型不一致候选方法会被从候选集中移除。

    1.2K30

    JAVA 1-6章测试题

    答:Java中变量就是指在程序运行过程中可能会变化值。 变量分为成员变量和局部变量。 5、局部变量成员变量区别?...答:局部变量成员变量区别: 1>局部变量是定义在类中方法体中,而成员变量是定义在类中方法体外; 2>局部变量只能在所定义方法体中或者代码块中使用,而成员变量在本类中都可以使用。...2>Super:如果父类中没有提供无参数构造方法,那么,我们必须通过super语句指导子类调用父类中其他构造方法; 3>子类中局部变量成员变量父类中成员变量同名,通过super访问父类成员变量...因为方法局部变量位于栈上,只存在方法生命期内。一个方法结束,其栈结构被删除,局部变量成为历史。但是方法结束之后,在方法内创建内部类对象可能仍然存在于堆中!...JVM中某个线程调用一个方法,会为这个方法中局部变量分配内存;JVM中某个线程结束调用一个方法,会结束这个方法中局部变量生命周期。

    84630
    领券