˵��
��ֵ���ã�Rvalue reference��T&&������������ֵ���ã�T&����������ʱ�����ͳ�����
��const T&�����ݵĶ���ֻ�������⡣��ֵ������������һ���ɱ�������ʱ�������ã���Ҫ���������ƶ����졣 �ƶ����죨move
constructor��ʹ���ƶ����Ǹ����������ɹ������̣���Ҫ���ڽ����Ӻ�������ֵʱ�Ĵ������������ʹ����ֵ���ú��ƶ����죬�ڰ�ֵ���ݺͷ�����ʱ����ʱ��������ȥ����Ҫ���ڴ����������ݿ���������
|
�ŵ�
- ���ض������£���ʵ���ڴ��㿽�����Ӷ���������ִ��Ч�ʡ�
|
ȱ��
-
��һ�����ӻ��˶��ݵ����塣������֪������ʹ���˴�ַ��ָ�롢���á���ֵ���ã������ǵĸ��ֳ������壩�Լ���ֵ�ȸ��ֶ��ݷ����Ĵ��룬��ѧϰ��ά���ɱ������ϸߡ��������۶���ʹ������ʵ������˵�����Ƚ����ײ���
bug��
- ��ҪΪÿ���������Ƕ�ʵ��һ���µĹ��췽����
- �ڴ�ͳ�� C++03
�����У�ͨ������ָ�����ֶ���ȫ����ʵ��ͬ�����㿽������ʹ���˴������ü���/дʱ���������ԵĴ���ʵ�֣����ܹ��ﵽ���õ��㿽��Ч�����ŵ����ܡ�
- ͨ������ָ�����ֶδﵽ�㿽����Ŀ�ģ��䷽���Ժ������������ܹ�����ֵ����+�ƶ������൱��
|
�ܽ�
ֻ����ʵ�ֱ�����ijЩ���뷵��ֵ�������ܷ�������ָ���Ⱦ���������Ҳ���ܷ������ã��ij��ϣ��ſ���ʹ����ֵ����+�ƶ����췽�������������£�����ָ����������ͨ���Ǹ��õ�ѡ���� |
|
��
˵��
constexpr ��Ҫ�������κ�������ֵ�������ú����ķ���ֵ�DZ���ʱ��֪�ģ��⼴���˺����ڽ�����һ�����硰return
��������ʽ;�����������䡣constexpr ͬ��Ҳ�����������ζ��������������������û��Զ������ͣ����û���ҪΪ�������䱸
constexpr ���캯�����ù��캯��ͬ��������ʹ�ñ���ʱ��֪�ij������ɳ�Ա��ʼ���� |
�ŵ�
ȱ��
�ܽ�
|
��
˵��
POD��Plain Old Data������ָ��Щ������ C struct ���ݵ��û��Զ������͡�C++03 �ж� POD
���͵Ķ��������Ͽ������±��У������ϣ�ֻҪһ���ʹ�������������ֻࣻʹ��Ĭ�ϵĹ������������������������л����ͳ�ԱҲ�����˵Ļ����������IJ��־���
POD ���ݵġ��±�ȡ�������г�Ա�������� public ����Ȩ��û������������������ |
�ŵ�
ȱ��
�ܽ�
��ʵ�ϣ�ò�ƴ� C++ ������ʼ���������������̾�һֱ��ʹ���������ɱ��ˡ�������һ�Ķ�ֻ������˳Ӧ��ʵ֮�٣�������
C++ ����Ա��˵û���κ�Ӱ�졣 |
|
��
˵��
ͨ��ʹ�� extern
������һ��ģ���࣬��֪��������ģ�������ڵ�ǰ���뵥Ԫ��ʵ��������Ҫ��ʵ���������������뵥Ԫ�ڽ��У��� |
�ŵ�
- �ṩ���ڳ���Ա��˵������ȷ��������ʵ�������ⲿ�����Ͷ������壩����ȥ�����Ƶ�ģ����ʽʵ������ʽ��
|
ȱ��
�ܽ�
�ֽ��� C++
����������֧��ģ������ʽʵ�������������ٱ���Ҳ����������ģ����ʽʵ��������ǰ���Ӹ���extern�����δ��ˡ����˸���һ��һ������Ҳ�����ڡ����ϳ�����Ʊ���Ĺ����� |
|
��
˵��
������ POD ��������ͨ����ʼ���б����ɹ��졣 |
�ŵ�
- ���ںܶ�����������˵�����磺std:vector�����ɴ����䴴�����̡�
|
ȱ��
�ܽ�
���õĹ��ܣ����ʺϾ�����Ҫͨ����ʼ���б����������������ij��ϡ� |
|
��
˵��
������ POD ���Ƿ� POD ���Ͷ�����ʹ�� obj = { ... } �ķ�ʽ�����г�ʼ�������ڷ� POD ���� {
... } ���Զ�ƥ���͵��ù��캯�������ˣ����캯�� T(x, y) ����Ҳ����д�ɣ�T{x, y}��T var{x, y}
�ȡ�����Ҫ����һ�� T ���Ͷ���ʱ����������ֱ��д����return {x, y};�� |
�ŵ�
- һ�µĹ��췽ʽ���ڱ������������������������
- ���������ع����ʹ���������
|
ȱ��
- �������ơ�return {x, y};����ʽ���Զ������ƶϺ������ʹ������ԺͿ�ά���ԡ�
|
�ܽ�
|
��
˵��
�� C++11 ��auto
�ؼ��ֵ������������ģ���ԭ��������һ�������ڵ�ǰ����ջ�ϵ��Զ�������ת������ͨ������ʽ����ֵ���Զ��ƶ���ֵ�����͡�decltype
�ؼ����������ж�ָ������ʽ�����͡� |
�ŵ�
- �ڶ���ģ�壬����Ҫ���� Lambda ����ʽ����������������ʱ�����ṩ���㡣
|
ȱ��
- ��ģ���У�Ӧֻ�����Ͳ���δ֪�����ѻ��õ�ʱ����Ӧ����ʹ���������ơ��������������ؽ��ʹ������ԺͿ�ά���ԡ�
- ���Ƶأ�����ͨ�����У�ֻӦ�ڲ����������Ͷ���ʱ����ʹ���������ơ�
- ��Ȼ�� C++03 �У�auto
�ؼ��ֺ����õ�����Ҳ���ɱ����Ĵ����˼��������⡪�������õ��Ͼ���������ȫû�õ���
|
�ܽ�
|
��
˵��
ûɶ�ö�˵�ģ������������ѿ��ô��ֵ� foreach �������ˡ���һЩ���������ʹ��ع��أ�֧�ֵ����Ӻ�
begin()��end() ���ã����������Ͷ���Ч�� |
�ŵ�
ȱ��
�ܽ�
�������� for ��������д����û��������Ҳ�ܹ�������ȷʵ�᷽��Щ����Ҳ�̶����ޡ� |
|
��
˵��
���ڱ���ʽ�ж���һ����������������������ʵ�����Ահ���closure���ļ��ͣ�һ�οɵ��õĴ���������ִ��ʱ�������������ġ���
C++11 �У��հ�Ҳ��ͨ�����������������Զ�������ʵ�ֵģ����ӣ�
std::vector<int> some_list;
int total = 0;
int value = 5;
std::for_each(some_list.begin(), some_list.end(), [&, value, this](int x) {
total += x * value * this->some_func();
});
|
�൱�ڣ�
class FOUnnamed {
private:
int& m_rnTotal;
int m_nValue;
CEnv* m_pEnv;
public:
FOUnnamed(int& total, int value, CEnv* this)
: m_rnTotal(total), m_nValue(value), m_pEnv(this)
{}
void operator()(int x)
{
m_rnTotal += x * m_nValue * m_pEnv->some_func();
}
};
std::vector<int> some_list;
int total = 0;
int value = 5;
FOUnnamed foPred(total, value, this);
std::for_each(some_list.begin(), some_list.end(), foPred);
|
���˿�����Ϊ lambda ����ʽ�ͱհ���һ�������������������Ŀ��ݷ�ʽ�� |
�ŵ�
ȱ��
- �������ڷ�װֻ�м��д����ļ����������������������������ؽ��ʹ������ԺͿ�ά���ԡ�
|
�ܽ�
���������ԣ�����ʹ��ǡ�����ܷ���ǿ���������� |
|
��
˵��
���� lambda ����ʽ�еķ���ֵ���巽ʽ��ģ������ͨ����Ҳ����ʹ�����Ƶ��ָ������ֵ�����磺
template<class Lhs, class Rhs>
auto adding_func(const Lhs &lhs, const Rhs &rhs) ->
decltype(lhs+rhs) {return lhs + rhs;} |
�Զ������������Ҫ������������ģ�嶨��ʱ�������ƶϡ����������У����������ƶϷ������͵ġ�lhs���͡�rhs���ڡ�adding_func(...)��֮ǰ��δ���壬���˱��뽫����ֵ���Ͷ����ӳٵ������б�֮����
Ӧע���ʹ�����ֺ����ʱ������ԭ��ָ������ֵ���͵�λ�ñ���������auto���� |
�ŵ�
- ����һЩ���������µķ���ֵ���塣
|
ȱ��
- ���������������ʹ������ԺͿ�ά���ԡ�
|
�ܽ�
Ҫô��������Ŀ��һ�µ�ʹ�ã�Ҫô����Ϊһ�ֽ����ض��������ֶΣ��ڡ��������Ρ�ʱ��ʹ�á� |
|
��
˵��
�� C++11
�У�һ�����캯�����Ե��ø����е��������캯�������ɲ��ֳ�ʼ��������ί�У���������Աʱ����ֱ��ָ��Ĭ�ϳ�ʼֵ�����磺
class CSomeType {
int m_nNumber;
int m_nValue = 10;
public:
CSomeType(int new_number) : m_nNumber(new_number) {}
CSomeType() : CSomeType(42) {}
}; |
|
�ŵ�
- ����һ���̶��ϼ�ʼ�����ش��롣
- �������Ĺ������ַ�װΪһ��˽�з��������й��캯�����ã�ί�и����ڱ�����ʵ��һЩ�Ż���
|
ȱ��
- �� C++03
�У������������캯����Ҫʹ��ͬһ�γ�ʼ�����룬���ɽ����δ�����װΪһ��˽�з��������й��췽�����á�
- ί�еļ����ı��˹��������壺C++03
�У���һ�������Ĺ��캯������ʱ���ö����������ɣ������������У�����һ�����������й��캯�����ö����غű����ö����������ɣ�ʹ�ö����������̱���һ���ظ��ӻ���
-
���Ƶأ������ͳ�Ա�Ĺ�������Ҳ����Ӧ�ظ��ӻ������������е����й��캯�����þ�����ʱ����������Ա�ſ�ʼ���죻����Ա�е����й��캯�������غ����������ſ�ʼ���졭��
|
�ܽ�
�����ڱף�ֵ��һ�ԡ���Ҫ�������µ����壬��Ҫ���Ǻù��캯���е��쳣�׳��봦����ʽ�� |
|
��
˵��
override
���η����ڱ�ʶָ�����鷽�������˻����е�ͬ���鷽�����������Ƕ���һ���µ�ͬ���鷽���������������б���ͬ���鷽�����������η����±���ʱ���ϸ����飬������Ϊ����ǩ����ͬ������ʧ�ܡ�
final ���η�������������������������ʱ������ʾָ������һ�� concrete �ࡪ����������Ϊ���������������̳С�
��
final ���η������ڷ���ʱ����ʾ���鷽���Ѿ�������ʵ�֣��κ���������������������������ͼ��������һ������������ |
�ŵ�
-
���������������������������ڱ���ʱ�������磺���˻�����ij�鷽���IJ����б���������������������������Ӧ�ĵȸ������ش�����
- ʹ�������麯����������������������������ǿ�ɶ��ԡ�
- Ϊ�������ṩ�˸������Ż�������
- override �� final
ֻ�����η������ǹؼ��֡����dz������ض������������ر������⣬��Ȼ������Ϊ�Ϸ��ı�ʶ��ʹ�á�
|
ȱ��
�ܽ�
�Ӽ����У����������ıر���Ʒ :-) |
|
��
˵��
C++11 �ж��������Լ��� NULL ָ�볣����nullptr�� |
�ŵ�
- ���������Զ��ġ�NULL������˵��nullptr ���������ں������ء�
|
ȱ��
�ܽ�
������ NULL ���� nullptr����Ӧ������һ�µ�ʹ�ã������������ã��� |
|
��
˵��
C++11 ͨ����enum class
...�����Ϊö���ṩ��ǿ����֧�֣�ͬʱ�������û�ָ��ö�ٵľ������ͣ��磺16λ�������Σ�32λ���Σ�64λ���εȵȡ� |
�ŵ�
- ǿ���ͼ����ž��˲�ͬö������֮���ıȽϻ�ö��������֮���ıȽϣ��ܹ��ڱ���ʱ���ָ���������
- ��ָ��ö�ٵ�λ�������˺ܶ�ԭ��������ʹ��ö�ٵij��ϣ����磺���Դ��� 32 λ���ơ�������ʽǿ�Ʊ�֤ 8
λ�ߴ��ȵȣ���
|
ȱ��
�ܽ�
|
��
˵��
����ģ��ʵ��ʱ��������ҪС�ĵ��ڶ��������Ĵ��ں�֮�����ӿո��ˡ� |
�ŵ�
- �����ٵ���ģ�嶨���еġ�>>��������Ϊ���Ʋ�����
|
ȱ��
�ܽ�
�����е����ԣ����������Լ��� bugfix�� |
|
��
˵��
�� C++11 �У�explicit ���η��ѿ�Ӧ��������ת���������������������õ���������ת���ͺ��������ж��� |
�ŵ�
-
һ����ת�������������ϸ�ƥ���ij��Ͽ����Զ�Ӧ����ʽ����ת������ʹ����ʽ����ת�����������ڲ����������Ե�ǰ���£��ṩ���õ�����ƥ�䡣
|
ȱ��
�ܽ�
������Ҳ�����������е����ԣ����źܶ�����Ա������д����explicit operator bool()������explicit
operator INT64()��֮���Ķ����� |
|
��
˵��
����ʹ�� using �������ģ��ʵ���ı�����Ч���� typedef ����һ���� |
�ŵ�
ȱ��
- �ٷ���˵���� C++03 ������ͨ�� typedef ������������ģ��������ʵ�������磺��typedef
CHandle< T, DestoryDeletor<T>, CAtomicINT32, NULL >
HT;�����䰴�� C++03 ����˵�ǷǷ��ģ����衰NULL��������Ϊ 0����using ������Ҫ���������������������ġ���ʵ�������Ѿ��ڸ��ְ汾�� GCC��VC��Intel C �ȱ���������ô���˺ܶ��갡�ܶ��ꡣ
���˿�����Ϊ�������ܾ͵�ͬ�� typedef��
|
�ܽ�
��˼�������� typedef �ͺá��������� using �����£���ô����һ�µ�ʹ�ã������������ã��� |
|
��
˵��
�� C++11 �� union ���ѿɰ������ַ� POD ���ͣ�Ҳ���Ը� union ���幹�캯���ͷ����ˡ� |
�ŵ�
- �ſ��� union �Բ��ַ� POD ��Ա���������ɻ�ʹ�������á�
- ����Ϊ�䶨�幹���ͷ�����һ��������ʹ�á�
|
ȱ��
- �������Σ����� union ���������ʣ����Ǻ�������֧�����������ɣ�
- ���������ʾ����ˣ�һ������ union �ṹ�Ŀɶ��ԺͿ�ά���Կ��¶�����ô����
|
�ܽ�
���õ����ԣ���Ҫע���ʿɶ�ֹ����Ҫ�����Ƹ���̫���ӡ� |
|
��
˵��
Ϊģ�巽���ṩ��������ͨ�����Ŀɱ�����������...��֧�֡� |
�ŵ�
- �ɼ����ط���һЩ����ģ���Ĺ��������磺����ʵ������ָ��ģ�����еġ�operator->*()������Աָ�������ã��������Լ�һЩ�����ڡ�printf����ģ�巽����
|
ȱ��
�ܽ�
|
��
˵��
C++11 �������� char16_t �� char32_t �������ͣ�����Ӧ�� wchar_t
λ����ȷ�������⡣�������� UTF-8��u8����UTF-16��u����
UTF-32��U���ַ�������ֵ���巽����ͬʱ��������һ�����������ţ�"���ͷ�б�ܣ�\���������ַ����л��������ַ�������ֵ���巽����R��,�÷�����������ǰ���ᵽ�� UTF ����ֵǰ����ʹ�ã�u8R, uR, UR�����dz�ȫ����ʵ�á� |
�ŵ�
- ��ȷ�� UTF-8��UTF-16 �� UTF-32 �ַ����ͼ�������ֵ���巽����
- ���ھ���ҪдЩ HTML/XML ������������ʽ֮������ֵ��ͯЬ��˵�����ַ������巽ʽ�������������ķ��ա�����ȥûɶ�����ǵ� coding ��ʱ������˭��˭֪��ѽ��
|
ȱ��
- �� wchar_t �����ؾɴ����ļ����Ǹ����⡣
|
�ܽ�
|
��
˵��
������1000ul����ʾ��ֵΪ 1000 �����ų�����������ֵһ����C++11 �����û�ͨ���µġ�operator
""�������Զ�������ֵ�������������磺
CMyClass operator "" _mysuf(const
char* literal_string);
CMyClass iVar = 1234_mysuf; |
|
�ŵ�
- �û����Է�����ֱ��ͨ������ֵ�������Զ������͵Ķ�����
|
ȱ��
- ����ʹ�ý����´����Ŀɶ��ԺͿ�ά���Լ����½���
|
�ܽ�
���漰�� coding ʱ�������Ķ�/ά��ʱ����֮����Ȩ�⣬Ӧ���á� |
|
��
˵��
�±��У���thread_local���洢��������ָ��һ�� TLS�� |
�ŵ�
- C++11 �й涨�κο���ʹ�á�static���洢���ĵط���������ʹ�� thread_local��Ҳ����˵���������������δ��й��졢���������Ķ�����ʹ��
TLS �������dz����㡣
|
ȱ��
- �� thread_local ���嵽ʵ�ʲ���ϵͳ TLS Slot API ֮���ķ�װ��ӳ�����ܴ�������������ʱ������
|
�ܽ�
���õĶ���������ֱ��ʹ�ò���ϵͳ�� TLS Slot ��Ȼ��������������ʽ�Ŀ�������ͨ���� TLS
��ȡҲû��̫�ߵ�Ч��Ҫ��Ȼ����Ҫ��ʹ�û����������㷨Ҫ��Ч���У��� |
|
��
˵��
C++11 �У��û�����ͨ����= default�������η���Ϊÿ������ʽָ��Ĭ�Ϲ��캯����Ҳ����ͨ����=
delete�������ι��캯����ֵ�Ȳ�����ͨ������ʵ�ֽ�ֹ���Ƶ����壩�� |
�ŵ�
- �ܹ�ͨ����ȷ�ķ�ʽ��ʽ����Щ���ⷽ����������ǿ�����Ŀɶ��ԺͿ�ά���ԡ�
|
ȱ��
�ܽ�
�Ǵ�ͳ�ģ�ͨ��������������ֵ��������Ϊ private ����ֹ���ƻ�������������������Ʒ�� |
|
��
˵��
C++11 ��������ȷ������ 64 bit �� long long ���͡� |
�ŵ�
ȱ��
�ܽ�
����ʲô��˵���أ�ͬ����һ�������У����Ҹ�������������֧�ֵ����ԡ� |
|
��
˵��
���� assert����רΪģ������������ assert ������ʱ�ż��飬static_assert ��ģ��ʵ����ʱִ�С� |
�ŵ�
- ����ʵ��������ģ����������У�顣
|
ȱ��
�ܽ�
|
��
˵��
���� sizeof ����ֱ�����������ij�Ա�����磺��sizeof CMyClass::m_nValue���� |
�ŵ�
ȱ��
�ܽ�
C++03 ��Ȼ���������ƣ���sizeof CMyClass::m_nValue����д������Ҳ���� sizeof �����������ij�Ա�����磺��CMyClass
iTest; return sizeof(iTest.a)��֮�ࡣ���ҳ������Ȳ�֪�����͵�ģ�����⣬����ûʲô�ط���Ҫ��ô��
sizeof �ġ� |
|
|