示例代码:
public enum Foods
{
Burger,
Pizza,
Cake
}
private void button1_Click(object sender, EventArgs e)
{
Eat(0); // A
Eat((Foods)0); // B
//Eat(1); // C : won't compile : cannot convert from 'int' to 'Foods'
给定程序:
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.
这些错误消息对我来说没有任何意义。我在这里没有看到
g++ 4.9.0接受以下代码:
enum E { foo };
struct C {
operator E() const { return foo; }
operator E() { return foo; }
};
int main() {
C c;
switch (c) {
case foo: break;
}
}
但是clang 3.4.1拒绝使用以下诊断:
12 : error: multiple conversions from switch condition type 'C' to an integral or enumerat
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;
或者另一种表达方式是:编译器是否可以假设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:
什么是最通用的描述数据的方法(没有逻辑附加),这些数据可以在不同的平台、数据库上共享,这些数据都是用不同的语言编写的?
到目前为止我的观点是:
JSON
优点:
大多数系统的实现
人类可读性
合理快速
- Cons:
- Hard to scale up (too much data!)
- No standard way to validate semantics
- No standard way to present for non-technical user
XML
优点:
大多数系统的实现
这在我看来确实很奇怪,而且我从未在资源中看到过关于C枚举的任何讨论。变量a的类型是enum Direction,它可以是-1,但是a<0将是假的。我错过了什么?
#include <stdio.h>
enum Direction {N,W,S,E};
int main()
{
enum Direction a = N;
printf("a is %d\n", a);
a--;
printf("now a is %d\n", a);
printf("but (a<0) is %d\n\n&
这是我的密码:
public class Program
{
public enum SexEnum{
Male,
Female
}
public static void Test(SexEnum s){
Console.WriteLine("enum...");
}
public static void Test(Object s){
Console.WriteLine("object...");
}
public static v
我从这个中文博客中得到了这个问题,作者想用c语言使用闭包,他发现GCC具有嵌套函数(和闭包)的能力。例如:
typedef int (*func_t)(int arg);
int foo(int a) {
return a + 1;
}
func_t create_wrap_function(func_t f) {
int wrapped(int arg) {
// call original function
int val = f(arg);
fprintf(log_func_call, "arg:
为什么加法需要强制转换,而减法不需要强制转换?请参阅下面的代码以理解我所问的内容
public enum Stuff
{
A = 1,
B = 2,
C = 3
}
var resultSub = Stuff.A - Stuff.B; // Compiles
var resultAdd = Stuff.A + Stuff.B; // Does not compile
var resultAdd2 = (int)Stuff.A + Stuff.B; // Compiles
注意:对于加法和减法,在上面的三个示例中,result是否超出(枚举的)范围并不重要。
从一些C遗留代码中,我得到了一些常量作为int *。在C++部分中,我有一个基础类型int的枚举。基于单个值的枚举和int之间的转换是有效的。然而,int *和enum *之间的转换是不可能的。请参阅下面的代码示例。
为什么是这样,我如何将指向某个int值的指针转换为指向int枚举的指针,反之亦然?我希望它能够工作,因为单个值转换工作,并且底层类型是相同的。我读过关于的文章,但无法确定是否有可能无效的值在这里发挥作用。
int i = 3;
enum E : int;
E e;
e = static_cast<E>(i); // ok
i = static_cast<i
我注意到以下代码与最近的编译器一起编译:
int main()
{
int x;
struct x;
x = 210; // ←
}
我记得它几年前没有编译。
在C++11或C++14中是否更改了查找规则以使该代码“工作”(从而中断了对struct variable_name;的使用,以确保在下面的代码中不使用变量)?
更新:显然我记错了。我已经验证了即使使用VisualC++ 2010编译的代码也是正确的。但是,当用于参数时,struct名称位于内部作用域和阴影中,如下代码所示:
void foo( int x )
{
st
C++枚举类型似乎是“默认可构造的”:
enum UE { a=1, b, c };
enum class SE { a=1, b, c };
int main() {
UE ue;
SE se;
}
如何从标准中解释这一点?
我的意思是-假设我们想要改变标准,使它不是默认的可构造的。哪些条款会改变?
我想知道为什么下面的代码会在Visual 2014更新4中产生错误。
enum A
{ a = 0xFFFFFFFF };
enum class B
{ b = 0xFFFFFFFF };
我知道我可以使用enum class B : unsigned int。但是,为什么enum的默认基础类型与默认的基础类型enum class不同呢?应该有一个设计决策。
我忘了提到这个错误:
错误C3434:枚举数值'4294967295‘不能表示为'int',值为'-1’
这表明默认的底层enum class类型是signed int,而默认类型的en