Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 枚举变量默认值?_C++_Variables_Enums_Default Value - Fatal编程技术网

C++ 枚举变量默认值?

C++ 枚举变量默认值?,c++,variables,enums,default-value,C++,Variables,Enums,Default Value,问题很简单: #include <iostream> enum SomeEnum { EValue1 = 1, EValue2 = 4 }; int main() { SomeEnum enummy; std::cout << (int)enummy; } #包括 枚举SomeEnum{ EValue1=1, EValue2=4 }; int main(){ 某物列举; std::cout程序具有。enummy的值是不确定的。

问题很简单:

#include <iostream>

enum SomeEnum {  
    EValue1 = 1,  
    EValue2 = 4
};

int main() {
    SomeEnum enummy;
    std::cout << (int)enummy;
}
#包括
枚举SomeEnum{
EValue1=1,
EValue2=4
};
int main(){
某物列举;
std::cout程序具有。enummy的值是不确定的。从概念上讲,您的代码与以下代码之间没有区别:

int main() {
   int i;          //indeterminate value
   std::cout << i; //undefined behavior
};
intmain(){
int i;//不确定值

std::cout+1.
问题很简单
你是不是刚从面试中走出来?:)不,我只是在用这样的代码查看继承的代码库,不幸的是……查看答案(-s),我明白这只是对好的旧规则的又一次确认:“永远不要编写原型”。但这是大多数开发人员必须处理的问题-某人的其他原型…@phresnel:当我写“问题很简单”时,我的意思是问题很简单,即很容易问,当然答案并不简单。@QuentinUK:你会得到一个任意数;“随机”这意味着一些非常具体的东西。但是事实上,我相信这个行为是不明确的。谢谢你的信息。请你指向C++标准中的特定段落?@回答的最后一部分隐含的事实是,除非用户为枚举定义自己的流运算符,否则使用积分类型的默认流。转换。因此,即使将
e
设置为
EValue1
,也将打印“1”,而不是“EValue1”。您可以创建自己的
std::ostream&operator@Haspemulator:Armen的解释隐式或显式地涵盖了很多事情:从未初始化的变量读取、静态初始化、枚举到整数值的隐式标准转换……嗯,期望他识别相关部分是不合理的这是C++的标准,事实上,这个特殊的情况被明确地提到:ISO/IEC 1488∶2003(E)第4.1节,LValt到rValf转换,声明“如果对象未初始化,需要转换的程序有未定义的行为。”@ArmenTsirunyan:+1 for Enum只是一种方便地命名某些值并创建新类型的方法,但您不会通过枚举数的值集来限制枚举的值。
enum SomeEnum {  
    EValue1 = 1,  
    EValue2 = 4,  
};
SomeEnum e; // e is 0
int i;      // i is 0

int main()
{
    cout << e << " " << i; //prints 0 0 
}