C++11新特性之新类型与初始化
作者:网络转载 发布时间:[ 2016/6/22 11:01:48 ] 推荐标签:测试开发技术 .NET
可以在使用new动态分配内存时使用列表初始化。
vector<int> *pv = new vector<int>{0, 1, 2, 3, 4};
int *pi = new int[5]{0, 1, 2, 3, 4};
cout<<"test new alloator using list initialization: "<<(*pv)[2]<<' '<<pi[2]<<endl;
可以在传入参数/函数返回值时使用列表初始化。
m1.insert({"d", "D"});
vector<string> error_msg(int typ)
{
switch(typ)
{
case 1:
return {"type1", "msg1"};
case 2:
return {"type2", "msg2"};
default:
return {};
}
}
pair<string, string> get_pair(int typ)
{
if(typ == 1) return {"key", "value"};
return pair<string, string>("default key", "default value");
}
vector<string> err_msg1 = error_msg(1);
vector<string> err_msg2 = error_msg(2);
vector<string> err_msg3 = error_msg(3);
cout<<"test return value list initialization: "<<err_msg1[1]<<' '<<err_msg2[1]<<' '<<err_msg3.empty()<<endl;
pair<string, string> p1 = get_pair(1);
pair<string, string> p2 = get_pair(2);
cout<<"test return pair list initialization: "<<p1.first<<' '<<p2.first<<endl;
类内成员初始化
C++11标准中允许直接对类内成员进行初始化/列表初始化。
class InitClass
{
public:
void print_class()
{
cout<<field1<<' '<<field2<<' '<<field3<<' '<<field4<<endl;
}
private:
int field1 = 1;
int field2;
double field3 = 1.0;
double field4;
};
class InitClassMgr
{
public:
vector<InitClass> init_objs = {InitClass()};
};
InitClass test_class;
cout<<"test class member initialization: ";
test_class.print_class();
InitClassMgr mgr;
cout<<"test class member of class type initialization: ";
mgr.init_objs[0].print_class();
总结
1、long long类型。
2、nullptr字面量用于表示空指针。
3、constexpr用于表示常量表达式。
4、noexcept可以用于指示一个函数是否会抛出异常,同时可以用作运算符判定一个函数是否承诺不抛出异常。
5、新增基础类型、容器类型、new分配内存时的列表初始化。构建临时变量时也可以直接使用列表初始化。
6、可以直接对类内成员进行初始化/列表初始化。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。

sales@spasvo.com