关于中国的户籍改革的一点想法
今天这篇文章是看《意见中国–经济学家访谈录》第112期,秦晖教授谈论“户籍制度背后的三大不平等”的观后感。
今天这篇文章是看《意见中国–经济学家访谈录》第112期,秦晖教授谈论“户籍制度背后的三大不平等”的观后感。
都说现在的人越来越浮躁,愿意思考的人越来越少,导致整个社会都显得浮躁不安。我觉得其实我们一直以来都是这样的,与这个时代的关系不大。之所以当代人会这么认为,是因为大多数人相较于不熟悉的历史更了解自己当下生活的年代。一旦自己所处的社会没有达到自己的预期,往往更愿意相信以前的年代比现在更好,人也更单纯。现在网络上很多人都在追捧民国时代,认为那个年代更加自由与开明。这是因为他们看到的都是民国精英贵族的事迹,认为自己如果生活在那个年代会同样的潇洒与自由,但是如果你深入了解了民国普通老百姓的生活你就不会这么认为了,毕竟你我都是属于普通阶层。
万能引用和右值引用都用”T&&“表示。
万能引用
所谓万能引用,即它既可以绑定左值,又可以绑定右值。一般用于表示型别推导的结果。
右值引用
右值引用,顾名思义就是只能绑定到右值,它的主要作用是作为可移动对象的标识。
std::move
std::move,即移动语义。它的设计初衷在于让编译器用一种低成本的移动操作替换昂贵的复制操作。与之相关的两个函数分别是移动构造函数和移动赋值运算符。
此外,std::move使得创建一个只可移动不可复制的对象成为可能,比如std::unique_ptr、std::future和std::thread等。
std::forward
std::forward,即完美转发。它的设计初衷是使对任何一个函数模板,都可以将当前函数所接受的实参原封不动地转发给其它函数,且目标函数接受到的实参与传入当前函数的实参完全相同,包括实参的左右值属性。
形参总是左值
所谓左值,简单地说就是可寻址变量,而右值则是不可寻址的临时变量。
1 | int a = 3; // a是左值,3是右值 |
实参既可以是左值,也可以是右值。而形参总是左值,原因在于形参是为了传递实参的值或指针或引用而出现的,因此必须是可被赋值的左值。即便形参的类别是右值引用,如下:
1 | void fun(Widget&& w); // 形参w是一个左值 |
std::unique_ptr是C++11用表达专属所有权的方式,一个非空的std::unique_ptr总是拥有其所指的资源。因此,std::unique_ptr不允许复制,即只能通过移动操作将所有权转移。
constexpr是C++11引入的关键字,主要目的是为了解决const关键字的二义性,constexpr既可用于修饰对象,又可用于修饰函数。
字面常量0的型别是int,而非指针。C++会在只能使用指针的语境中才勉强将其解释为空指针。
NULL是一个宏定义,而非指针。同样,C++会在只能使用指针的语境中才勉强将其解释为空指针。
1 | /* Define NULL pointer value */ |
nullptr是C++关键字,不具备整型型别。实际上,它也不具备指针型别,但是它可以隐式转换成任意指针型别,这也就是为什么nullptr可以用于初始化所有指针型别的原因。