
c++
labud
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
临时变量,左值右值,右值引用及其作用
C++11 新增了很多功能,其中一个叫做右值引用。为了搞清楚这个东西,参考了几篇网上的博客,于是便有此文: 首先我们需要搞清楚左值和右值之分。而为了区分左值和右值,我们先注意到C++中的临时变量:C++中的临时变量指的是那些由编译器根据需要在栈上产生的,没有名字的变量。 1) 函数的返回值, 如:转载 2015-07-31 20:27:22 · 2059 阅读 · 0 评论 -
《Effective Modern C++》Item 9: Prefer alias declarations to typedefs.
引子C++11中引入的std::unique_ptr智能指针是个好用的东西,在我们使用unique_ptr的时候往往会写出这样的类型std::uniqeu_ptr<std::unordered_map<std::string,std::string>>,看上去很臃肿,因此大多数的时候我们会选择使用typedef进行类型的重定义,简化类型名称。可是在C++11中引入了一个...翻译 2018-06-27 14:54:06 · 323 阅读 · 0 评论 -
《Effective Modern C++》Item 10: Prefer scoped enums to unscoped enums.
引子枚举是C中一个常见的基本类型,一般来说,我们声明一个变量,它的作用域仅存在于它外层花括号包围的范围内,但是这个限制对于枚举(准确说C++98版本的枚举)并不成立:enum Color { black, white, red }; // black, white, red are in same scope as Colorauto white = false; ...翻译 2018-07-09 11:48:46 · 307 阅读 · 0 评论 -
《Effective Morden C++》Item 8: Prefer nullptr to 0 and NULL.
引子这一条目就比较简单了,就是宣传用nullptr来指代空指针,而不是之前的0或者NULL。正文在老式C++中,显然0是int类型,而NULL也是一个整数类型(int或者long)。总的来说,这两个常用来表示空指针的符号并不是真正的指针类型。这样,当我们在进行函数重载时会发生麻烦,例如:void f(int); // three overloads of fvo...翻译 2018-06-24 16:13:52 · 292 阅读 · 0 评论 -
《Effective Modern C++》Item 5: Prefer auto to explicit type declarations.
引子这篇文章主要是branding auto这个关键字。和Item 2不同的是,本文主要是夸赞auto的优点,而Item 2则是简单的介绍。当然auto也有自己的问题,我们会在Item 2和Item 6中谈及它的问题。正文1.帮助检查初始化以及减少代码复杂度这条很容易理解意思,不细说。直接看例子int x1; // potentially uninitial...翻译 2018-06-08 19:20:57 · 278 阅读 · 0 评论 -
《Effective Modern C++》Item 1: Understand template type deduction
引子老爷子上来第一大章(Item 1-4)就讨论了类型推导,依次介绍了:模版类型推导auto类型推导decltype关键字获取变量类型的正确姿势当然了,从最简单的auto关键字入手,确实是方便老c++用户熟悉c++11/14的快速方法。本文就先介绍模板类型推倒吧。正文先看一段代码template<typename T> void f(Para...翻译 2018-06-01 18:36:47 · 303 阅读 · 0 评论 -
《Effective Modern C++》读书笔记
最近开始从Java技术栈换回C++技术栈,于是找到了S. Meyers老爷子的《Effective Modern C++》出来重新学习C++。说实话,当年读研时读过他的经典作品《Effective C++》和《More Effective C++》,受益匪浅。这次开了个新坑,打算做个简单的读书笔记,每条笔记都和原书对应,但又有些不同:只做概要性笔记,不面面俱到,毕竟能看到《Effective...翻译 2018-05-31 21:05:47 · 937 阅读 · 0 评论 -
《Effective Morden C++》Item 7: Distinguish between () and {} when creating objects
引子从本Item开始,我们就进入了第二个章节,本章节,S.M.通过对比C++的新老feature来鼓励大家使用new features. 本Item先从对象初始化开始。正文1.基础C++11中引入了{}初始化,这样使得我们的初始化变得很丰富,我们可以用{}, () 和 = 三种初始化方法:int x(0);int y = 0;int z{0};int c = {0};...翻译 2018-06-22 10:44:05 · 282 阅读 · 0 评论 -
《Effective Modern C++》Item 4: Know how to view deduced types.
引子本条目就相当轻松了,主要是S.M.老爷子教大家如何查看类型,毕竟之前3节讲了这么多,对于C++1x的新手来说上手还是要花一段时间的,所以从下面3个角度介绍如何查看类型:IDE编译器时诊断运行时输出正文正文中,我们需要获得下面两个变量的类型:const int theAnswer = 42; auto x = theAnswer;auto y = &...翻译 2018-06-04 21:36:37 · 328 阅读 · 0 评论 -
《Effective Modern C++》Item 6: Use the explicitly typed initializer idiom when auto deduces undesired
引子之前Item 5介绍了auto关键字的优点,当然在Item 2我们看到了auto的一些不足,比如由于auto也是在用模板类型做推导,所以某些情况下会丢掉CV修饰符。但这个缺点似乎没有那么有说服力,毕竟这是模板类型推导的锅。本文我们继续探讨auto本身的缺点。正文先看一段代码std::vector<bool> features(const Widget& ...翻译 2018-06-11 18:06:51 · 317 阅读 · 0 评论 -
《Effective Modern C++》Item 3: Understand decltype.
引子decltype是C++中的一个老特性了,绝大多数情况它会让你获得你期望的类型。当然,凡事都有特例,我们需要稍微注意一下,除了避免踩坑以外,也能帮助我们进一步了解类型推导。正文1.普通情形我们先预热一下,看看decltype确实是大部分时候是符合预期的:const int i = 0; // decltype(i) is const int...翻译 2018-06-03 21:02:29 · 296 阅读 · 0 评论 -
《Effective Modern C++》Item 2: Understand auto type deduction.
正文1.普通情形在c++11中,引入了auto关键字,关于auto关键字的推导,绝大多数和上一个Item的模板推导是一样的。例如:auto x = 27; // case 3 (x is not reference)const auto cx = x; // case 3 (cx isn't either)const auto&amp...翻译 2018-06-03 14:54:26 · 267 阅读 · 0 评论 -
《Effective Modern C++》Item 11: Prefer deleted functions to private undefined ones.
引子当我们不想向用户提供某个函数功能时,我们只需要不实现它就可以了。但是在C++中,有一些函数会被默认实现,例如类的复制构造函数(copy constructor)和赋值函数(copy assignment operator)。这时C++98中的方法就是设置其属性为私有函数,通过访问权限来限制用户的实用。正文但是上面的方法并不总是成立,例如友元函数(friend function)仍然...翻译 2018-07-09 15:53:15 · 352 阅读 · 0 评论