[译]GotW #1: Variable Initialization 续】的更多相关文章

Answer 2. 下面每行代码都做了什么? 在Q2中,我们创建了一个vector<int>且传了参数10和20到构造函数中,第一种情况下(10,20),第二种情况是{10, 20}. 它们都将调用构造函数,但是是哪个?vector<int>有好几个带两个参数的构造函数,但只有两个能在参数10和20下正确调用.为了简单,在此忽略了默认可选的allocator参数.这两个构造函数是: vector( size_t n, const int& value ); // A: n…
原文地址:http://herbsutter.com/2013/05/09/gotw-1-solution/ 第一个问题强调的是要明白自己在写什么的重要性.下面有几行简单的代码--它们大多数之间都有区别,尽管在语法上只有轻微的不一样. Problem JG Question 1. 下面代码存在差异吗? widget w; // ( a ) widget w(); // ( b ) widget w{}; // ( c ) widget w( x ); // ( d ) widget w{ x }…
const 和 mutable在C++存在已经很多年了,对于如今的这两个关键字你了解多少? Problem JG Question 1. 什么是“共享变量”? Guru Question 2. const 和 mutable对于共享变量来说意味着什么? 3. 在C++98和C++11两者间,const 和 mutable有什么区别? Stop and thinking…… Solution 1. 什么是“共享变量”? 共享变量是在同一时间可以被多个线程同时访问的变量. 这个概念在C++内存模型中…
There's a lot to love about standard smart pointers in general, and unique_ptr in particular. Problem JG Question 1.什么时候你应该使用shared_ptr vs unique_ptr?尽可能列出你所想到的注意事项. Guru Question 2.为什么你应该总是使用make_shared来创建一个被shared_ptr(s)拥有的对象?请解释. 3.为什么你应该总是使用make_…
     const和mutable对于书写安全代码来说是个很有利的工具,坚持使用它们. Problem Guru Question 在下面代码中,在只要合适的情况下,对const进行增加和删除(包括一些微小的变化和一些相关的关键字).注意:不要注释或者改变程序的结构.这个程序只作为演示用途. 另外:程序的哪些地方是由于错误地使用const而导致的未定义行为或不可编译? class polygon { public: polygon() : area{-} {} ; points.push_ba…
你对写一个类的细节有多在行?这条款不仅注重公然的错误,更多的是一种专业的风格.了解这些原则将会帮助你设计易于使用和易于管理的类. JG Question 1. 什么使得接口“容易正确使用,错误使用却很难”?解释一下. Guru Question 2. 你正在代码审查,一个程序员写了下面这个类,里面有一些不良的风格和一写具体的错误.你能发现多少?如何修正? class complex { public: complex( ) : real(r), imag(i) { } void operator…
高效的代码重用是良好的软件工程中重要的一部分.为了演示如何更好地通过使用标准库算法而不是手工编写,我们再次考虑先前的问题.演示通过简单利用标准库中已有的算法来避免的一些问题. Problem JG Question 1. 最广泛使用的C++库是什么? Guru Question 2. 首先,在GotW #2中有多少陷进是可以避免的,如果程序员只是用以下方法替代显示的基于迭代器的for循环:      (a)一个基于范围的for循环?      (b)一个标准库算法调用? (注意:和GotW #2…
    不必要的和(或)临时的变量经常是罪魁祸首,它让你在程序性能方面的努力功亏一篑.如何才能识别出它们然后避免它们呢? Problem JG Question: 1. 什么是临时变量? Guru Question: 2. 假设你正在代码审查,一个程序员写了如下的的一个函数,这个函数至少在三个地方使用了不必要的临时或者额外的对象.你能辨别出哪些?其如何修正它们? string find_addr( list<employee> emps, string name ) { for( auto i…
   虚函数是一个很基本的特性,但是它们偶尔会隐藏在很微妙的地方,然后等着你.如果你能回答下面的问题,那么你已经完全了解了它,你不太能浪费太多时间去调试类似下面的问题. Problem JG Question 1. override和final这两个关键字都有什么作用?为什么他们有用? Guru Qusetion 2. 在你浏览公司的代码的时候,你看到了一个未知程序员写的下面的代码片段.这个程序员好像看起来是在练习一些C++特性,想看下它们是怎么工作的. (a)怎么做能改进下面代码的正确性或风格…
C++11之统一初始化语法 | 桃子的博客志 https://taozj.net/201710/list-initialize.html 在当前新标准C++11的语法看来,变量合法的初始化器有如下形式: 1 2 3 4 X a1 {v}; X a2 = {v}; X a3 = v; X a4(v); 其实,上面第一种和第二种初始化方式在本质上没有任何差别,添加=则是一种习惯上的行为.使用花括号进行的列表初始化语法,其实早在C++98时代就有了,只不过历史上他们只是被用来对数组元素进行初始化操作,…