或者另一种表达方式是:编译器是否可以假设enum的实例只能保存声明为保存的值,并根据该假设进行优化?
enum MyType { A = 1, B = 2 };
const MyType C = static_cast<MyType>(3);
void fun(MyType m) {
switch (m) {
case A:
// ...
break;
case B:
// ...
break;
case C:
int a, b, c;
//do stuff. For e.g., cin >> b >> c;
c = a + b; //works
c = operator+(a,b); //fails to compile, 'operator+' not defined.
另一方面,这个很管用-
class Foo
{
int x;
public:
Foo(int x):x(x) {}
Foo friend operator+(const Foo& f, const Foo& g)
{
retur
在我之前提出的问题中,我发现无论出于什么原因,我都必须使用枚举来定义以下源代码中的值:
enum { key0_buffer = 0};
void process_tuple(Tuple *t)
{
//Get key
int key = t->key;
//Get integer value, if present
int value = t->value->int32;
//Decide what to do
switch(key) {
case key_0:
enum {key0_buffer
给定程序:
enum E : int
{
A, B, C
};
g++ -c test.cpp运行得很好。但是,clang++ -c test.cpp会显示以下错误:
test.cpp:1:6: error: ISO C++ forbids forward references to 'enum' types
enum E : int
^
test.cpp:1:8: error: expected unqualified-id
enum E : int
^
2 errors generated.
这些错误消息对我来说没有任何意义。我在这里没有看到
在C中,如果我们在enum中重新声明变量,那么编译器会给出一个错误,即"'i‘“重新声明为不同类型的符号”.It Ok“。
#include <stdio.h>
int i = 10;
struct S
{
enum
{
i = 20
}e;
};
int main()
{
printf("%d\n", i);
}
但是,在C++中,如果我们在枚举中重新声明变量,那么它就正常工作了。
#include <iostream>
using namespace std;
int i
enum Color {RED, GREEN, BLUE};
class SwitchEnum
{
public static void main(String[] args)
{
Color c = Color.GREEN;
switch(c)
{
case RED:
System.out.println("red");
break;
case GREEN:
System.out.println("green");
break;
这是一个让我困惑了一段时间的疑问。
使用类Calendar来比较日历枚举值,例如:
Calendar c = Calendar.getInstance();
if (c.SUNDAY == c.getFirstDayOfWeek()); //US local
System.out.println("indeed");
所以基本上,我想知道如何将枚举(SUNDAY)与返回int的getFirstDayOfWeek()方法进行实际比较。
提前感谢你的回答。
是否可以在默认为私有的模块中公开枚举?
module mod
private
enum, (public,) bind(c) !Doesn't work
enumerator(, public) :: ENUM1, ENUM2,... !Doesn't work
end enum
end module
默认情况下,我希望模块数据保持私有,但希望枚举是公开的,而不必像下面这样单独列出它们:
public :: ENUM1, ENUM2,... !Works
我知道枚举只是整数参数,所以我很好奇是否可以一次对所有的参数都这么做。
如果我有一个开关语句显式地处理所有枚举案例,那么编译器是否允许优化缺省case语句?
enum MyEnum {
ZERO = 0,
ONE = 1,
TWO = 2,
THREE = 3,
};
bool foo(MyEnum e) {
switch(e) {
case ZERO:
case ONE:
case TWO:
case THREE:
return true;
default: // Could a compiler optimise this away?
return false;
}
}
说关于枚举(强调我的):
整数、浮点和枚举类型的值
我注意到以下代码与最近的编译器一起编译:
int main()
{
int x;
struct x;
x = 210; // ←
}
我记得它几年前没有编译。
在C++11或C++14中是否更改了查找规则以使该代码“工作”(从而中断了对struct variable_name;的使用,以确保在下面的代码中不使用变量)?
更新:显然我记错了。我已经验证了即使使用VisualC++ 2010编译的代码也是正确的。但是,当用于参数时,struct名称位于内部作用域和阴影中,如下代码所示:
void foo( int x )
{
st