首页
学习
活动
专区
工具
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.8K41
  • Java 语言基础 (类和对象, 方法和封装, static 关键字和继承, 多态和特殊类)

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

    82430

    C++中的作用域与生命周期

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

    1.2K20

    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,使用成员赋值

    88311

    C++作用域与生命周期

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

    93732

    怎么一本正经地秀技

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

    33300

    设计规则

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

    2K20

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

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

    38620

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

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

    64520

    第 19 章 特殊工具与技术

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

    83750

    Java思维理清思路

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

    43610

    第 19 章 特殊工具与技术

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

    75140

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

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

    1.3K10

    08 内部类(嵌套类)

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

    67210

    Oracle Java类和对象

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

    89200

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

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

    87410

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

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

    2K20

    JAVA 1-6章测试题

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

    84930

    C# 7.3新特性一览

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

    1.2K30
    领券