Enum:
作用域:
全局作用域: enum classname{ membername = value} (结尾不需要分号,和块类似)。
局部作用域: enum class classname{ membername = value}
初始化:
enum定义了新的类型,所以一定要用对象来初始化enum对象。
* 一个全局作用域的enum对象或成员可以自动转化为int类型。但是局部作用域的不可以。
前值声明:
C++11中可以前置声明enum。
enum classname : typename; 如果是全局作用域的enum必须指定其类型。
enum class classname ; 局部作用域的enum可以不指定类型,将会隐式转化为int类型。
namespace:
namespace可以不连续,完成接口与实现分离。
#ifndef test_h
#define test_h
namespace
{
class fly{};
void cool ();
}
#endif
#include "test_h"
namespace
{
void cool(){}
}
局部作用域中如果有和全局作用域中重名的变量或函数,将会隐藏全局版。 使用using声明让函数可见。
当函数中参数有类对象时,调用函数时也会去类声明的作用域中查找。