首页 > 代码库 > c++ 11 key note
c++ 11 key note
<style></style>
常数初始化,使用constexpr关键字
constexpr in getNum(){return 4}; int some_arr[getNum + 3];
初始化列表
class InitClass{ public: InitClass(std::initializer_list<int> list);}InitClass var = {0,12,33};//标准库容器std::vector<string> arr = {"apple","google","adobe"};
统一初始化
struct IDVO { string name; int age; } // 自动将const char* 转成string IDVO var = {"Steven",667}; IDVO getById() { return {"Jobs",78}; } //统一初始化不会取代构造函数
自动类型推导
//使用auto关键字实现参数类型推导auto a = 1; // a是int类型auto b = "hello"; // b是const char *int abc(int a,int b,int c){ return a + b + c;}auto bindFuc = std::bind(abc, std::placeholders::_1,std::placeholders::_2,std::placeholders::_3);//注意下面的写法auto myarr[2] = {1,2};//错误,编译器报错int myarr1[2] = {1,2};//正确decltype(myarr1) myarr2; //正确//还可以向下面这样使用std::vector<string> arr = {"apple","google","adobe"};for (auto ite = arr.begin();ite != arr.end(),ite++){}//与decltype的配合用法int sint = 1;decltype(sint) bint = 4;//auto d = bint;//auto c = 0;decltype(c) e; //e为int类型decltype((c)) f = e; // f为int&类型,
for循环
int myarr3[3] = {1,2,3};for (int &x : myarr3){}// vector<string> arrVec = {"apple","google","adobe"}; for (const auto &x : arrVec) { printf("%s",x.c_str()); }
Lambda函数
//一个lambda实例, 参数在()中定义;返回值-> ,无返回值时可以去掉 ;函数体{} auto sumFuc = [](int x,int y) ->int { return x+ y;}; int ret = sumFuc(1,222);//以下定义了一个function std::function<int(int,int)> sumFuc1 =[](int x,int y) ->int { return x+ y;}; int ret1 = sumFuc1(1,222); //[] 内部定义了一个lambda内部如何使用外部变量 [] 表示不能以任何形式使用外部变量 [=] 表示任何被使用的外部参数将以传值形式加以使用 [&] 表示任何被使用的外部参数将以引用形式加以使用 //下面是一个错误的例子,lambda无法直接使用外部ret1变量 auto sumfuc2 = [](int z)->int { return ret1 + z; }; //下面这个写法就是对的 auto sumfuc2 = [&](int z)->int { return ret1 + z; }; //可以使用不同的传值方式比如,ret显示的以引用使用,ret1则是传值方式 auto sumFunc3 = [&ret,ret1]()->int { return ret + ret1; }; cocos2d-x中,很多地方可以使用lambda表示,如触摸的onTouchBegan方法我们可以这么写 auto touchListener = EventListenerTouchOneByOne::create(); touchListener->onTouchBegan = [](Touch *touch, Event *event)->bool { return true; };
std::bind 和std::function
std::function 可以绑定到全局函数/类静态函数,如果要绑定到类的实例的函数则使用std::bind;std::bind 可以绑定lambda表达式;注意 std::bind无法绑定重载函数(同名函数)-----
nullptr和NULL
//关键字nullptr用来将空指针和整数0区分开来;nullptr的类型是nullptr_t,而NULL依然被定义为0//比如有两个函数void foo(char *); //<1>void foo(int); //<2>foo(nullptr) //调用<1>foo(0) //调用 <2>//0依然可以代表空指针
字符串
c++11支持三种unicode编码方式:UTF-8;UTF-16和UTF-32. 新加入两种类型的字符类别char16_t和char32_t,以支持UTF-16和UTF-32
const char str8[] = "c++11标准"; int len = strlen(str8); // 11 //u8表示char ;u表示char16_t,U表示char32_t const char16_t str16[] = u"c++11标准"; std::u16string ss16(str16); //引入u16string int l = ss16.length(); // 7 //还可以用下面这个方法获取长度 int l16 = sizeof(str16)/sizeof(str16[0]])
多线程
//多线程std::thread t;
c++ 11 key note
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。