给定程序:
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.
这些错误消息对我来说没有任何意义。我在这里没有看到
示例代码:
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 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:
我正在使用Roslyn编写一个应用程序来从语法和语义上分析C#源代码。对于要分析的源代码中定义的每种类型,我希望存储它是引用类型(类)、值类型(结构)还是接口。
一个类型的类型的适当/官方术语是什么?
示例:
class A
{
//This type's type (A's type) is 'class' (i.e. a reference type).
}
这是我的密码:
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
为什么加法需要强制转换,而减法不需要强制转换?请参阅下面的代码以理解我所问的内容
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;
}
如何从标准中解释这一点?
我的意思是-假设我们想要改变标准,使它不是默认的可构造的。哪些条款会改变?
为什么说在java中使用枚举更好。如果您有不同数据类型的常量,我认为最好用类来处理常量,而不是枚举。
喜欢
Class A {
public static int A = 1;
public static int B = 2;
public static String c = "RADIUS";
public static String d = "LENGTH";
}
而不是
enum ofInts {A(1), B(2)}
enum ofStrings{c("RADUIS"), d("LENGTH
我想将C++11作用域枚举与默认的int实现一起使用:
enum class Color
{
gray = 1,
red = 2
};
这是用gcc编译的,但是:
Color color = Color::red; // 'Color' is not a class or a namespace
Color color = red; // 'red' was not declared in this scope
我做错了什么?
编辑:
这应该是可编译的,但它不是,至少对我来说不是。我使用
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