C++0x��C++11�������Ե���

����

baiy.cn

��

C++11 �ڲ���֮ǰ�ѻ�ͨ�������� C++03 ��������Ҫ�����ں������Ժͱ�׼���������档��Ϊ��C++�����淶��ָ�����е�һ��С�ڣ�������Ҫ���� C++11 �У��������������ı仯��


Ŀ¼

��

����Ŀ¼


��������

��ֵ���ú��ƶ���������

˵��

��ֵ���ã�Rvalue reference��T&&������������ֵ���ã�T&���޷�������ʱ�����ͳ����� ��const T&�����ݵĶ���ֻ�������⡣��ֵ������������һ���ɱ�������ʱ�������ã���Ҫ���������ƶ����졣

�ƶ����죨move constructor��ʹ���ƶ����Ǹ����������ɹ������̣���Ҫ���ڽ����Ӻ�������ֵʱ�Ĵ������������ʹ����ֵ���ú��ƶ����죬�ڰ�ֵ���ݺͷ�����ʱ����ʱ��������ȥ����Ҫ���ڴ����������ݿ���������

�ŵ�

  • ���ض������£���ʵ���ڴ��㿽�����Ӷ���������ִ��Ч�ʡ�

ȱ��

  • ��һ�����ӻ��˶��󴫵ݵ����塣������֪������ʹ���˴�ַ��ָ�롢���á���ֵ���ã������ǵĸ��ֳ������壩�Լ���ֵ�ȸ��ֶ��󴫵ݷ����Ĵ��룬��ѧϰ��ά���ɱ������ϸߡ��������۶���ʹ���߻���ʵ������˵�����Ƚ����ײ��� bug��
  • ��ҪΪÿ���������Ƕ�ʵ��һ���µĹ��췽����
  • �ڴ�ͳ�� C++03 �����У�ͨ������ָ�����ֶ���ȫ����ʵ��ͬ�����㿽������ʹ���˴������ü���/дʱ���������ԵĴ���ʵ�֣����ܹ��ﵽ���õ��㿽��Ч���͸��ŵ����ܡ�
  • ͨ������ָ�����ֶδﵽ�㿽����Ŀ�ģ��䷽���Ժ������������ܹ�����ֵ����+�ƶ������൱��

�ܽ�

ֻ����ʵ�ֱ�׼����ijЩ���뷵��ֵ�������ܷ�������ָ���Ⱦ���������Ҳ���ܷ������ã��ij��ϣ��ſ���ʹ����ֵ����+�ƶ����췽�������������£�����ָ����������ͨ���Ǹ��õ�ѡ����

��

��������ʽ��constexpr��

˵��

constexpr ��Ҫ�������κ�������ֵ�������ú����ķ���ֵ�DZ���ʱ��֪�ģ��⼴���˺����ڽ�����һ�����硰return ��������ʽ;�����������䡣constexpr ͬ��Ҳ�����������ζ��������������������û��Զ������ͣ����û���ҪΪ�������䱸 constexpr ���캯�����ù��캯��ͬ��������ʹ�ñ���ʱ��֪�ij������ɳ�Ա��ʼ����

�ŵ�

  • ���������ú������ꡣ

ȱ��

  • �������������������ࡣ

�ܽ�

��˼������

��

�ſ��� POD ���Ͷ���

˵��

POD��Plain Old Data������ָ��Щ������ C struct ���ݵ��û��Զ������͡�C++03 �ж� POD ���͵Ķ��������Ͽ������±�׼�У������ϣ�ֻҪһ���಻ʹ�������������ֻࣻʹ��Ĭ�ϵĹ������������������������л����ͳ�ԱҲ�����˵Ļ����������IJ��־��� POD ���ݵġ��±�׼ȡ�������г�Ա�������� public ����Ȩ�޵�û������������������

�ŵ�

  • �ޡ�

ȱ��

  • �ޡ�

�ܽ�

��ʵ�ϣ�ò�ƴ� C++ ������ʼ���������������̾�һֱ��ʹ���������ɱ�׼�ˡ�������һ�Ķ�ֻ������˳Ӧ��ʵ֮�٣������� C++ ����Ա��˵û���κ�Ӱ�졣

��

extern �����

˵��

ͨ��ʹ�� extern ������һ��ģ���࣬��֪��������ģ�������ڵ�ǰ���뵥Ԫ��ʵ��������Ҫ��ʵ���������������뵥Ԫ�ڽ��У���

�ŵ�

  • �ṩ���ڳ���Ա��˵������ȷ��������ʵ�������ⲿ�����Ͷ������壩����ȥ�����Ƶ�ģ����ʽʵ������ʽ��

ȱ��

  • �ޡ�

�ܽ�

�󲿷ֽ��� C++ ����������֧��ģ������ʽʵ�������������ٱ���Ҳ����������ģ����ʽʵ��������ǰ���Ӹ���extern�����δ��ˡ����˸���һ��һ������Ҳ�����ڡ����ϳ�����Ʊ���Ĺ�����

��

��ʼ���б�

˵��

������ POD ��������ͨ����ʼ���б����ɹ��졣

�ŵ�

  • ���ںܶ�����������˵�����磺std:vector�����ɴ��󷽱��䴴�����̡�

ȱ��

  • ��Ҫ���Ӷ����Ĺ��캯����

�ܽ�

���õĹ��ܣ����ʺϾ�����Ҫͨ����ʼ���б����������������ij��ϡ�

��

ͳһ�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 ��������д����û��������Ҳ�ܹ�������ȷʵ�᷽��Щ����Ҳ�̶����ޡ�

��

Lambda ����ʽ�ͱհ�

˵��

���ڱ���ʽ�ж���һ�������������󣬲���������ʵ�����Ահ���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 ����ʽ�ͱհ���һ�������������������Ŀ��ݷ�ʽ��

�ŵ�

  • ���������˺������������ɣ��dz��ʺ������� STL �㷨��ν�ʡ����� STL �㷨�еĴ󲿷ֶ������� std::for_each ���ֵļ����㷨������û�� Lambda ����ʽ�ͱհ��Ļ�����������ʾ��Ϊ�䶨��ν�ʵĴ��۹��ڸ߰���������ֱ��ʹ�õ����Ӻ� for �������ɱ������������ݡ�
    ��
  • ����ֱ�ӱ�дijЩ���������ĺ���������ʱʵ�������磺��auto foFunc = [](int x, int y) -> int { int z = x + y; return z; }����ʹ�ú�������������ʹ�á�
    ��
  • ���� lambda ����ʽ����һ���������͵�ʵ�������˼�ʹ��ͷ�ļ�������������Ҳ����ʹ�ú������󣬲��õ��Ľ����ļ� include ���������뵥Ԫʱ��������������
    ��

  • ʹ�ñհ���������ʽ�����ױ��������Ż���

ȱ��

  • �������ڷ�װֻ�м��д����ļ򵥺������������������������׼����ؽ��ʹ����׶��ԺͿ�ά���ԡ�

�ܽ�

���������ԣ�����ʹ��ǡ�����ܷ���ǿ����������

��

����ֵ����ʽ���������﷨

˵��

���� 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 ���η�

˵��

override ���η����ڱ�ʶָ�����鷽�������˻����е�ͬ���鷽�����������Ƕ���һ���µ�ͬ���鷽���������������б���ͬ���鷽�����������η����±���ʱ���ϸ����飬������Ϊ����ǩ����ͬ������ʧ�ܡ�

final ���η��������������򷽷�����������ʱ������ʾָ������һ�� concrete �ࡪ����������Ϊ���������������̳С�

�� final ���η������ڷ���ʱ����ʾ���鷽���Ѿ�������ʵ�֣��κ���������������������������ͼ��������һ������������

�ŵ�

  • ���������������������������ڱ���ʱ�������磺�޸��˻�����ij�鷽���IJ����б���������������������������Ӧ�޸ĵȸ������ش�����
  • ʹ�������麯����������������������������ǿ�ɶ��ԡ�
  • Ϊ�������ṩ�˸������Ż�������
  • override �� final ֻ�����η������ǹؼ��֡����dz������ض������������ر������⣬��Ȼ������Ϊ�Ϸ��ı�ʶ��ʹ�á�

ȱ��

  • �ޡ�

�ܽ�

�Ӽ����У����������ıر���Ʒ :-)

��

NULL ָ�볣��

˵��

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 �����£���ô����һ�µ�ʹ�ã������������ã���

��

ǿ�������ϣ�union������

˵��

�� C++11 �� union ���ѿɰ������ַ� POD ���ͣ�Ҳ���Ը� union ���幹�캯���ͷ����ˡ�

�ŵ�

  • �ſ��� union �Բ��ַ� POD ��Ա���������ɻ�ʹ�������á�
  • ����Ϊ�䶨�幹���ͷ�����һ��������ʹ�á�

ȱ��

  • �������Σ����� union ���������ʣ����Ǻ�������֧�����������ɣ�
  • ���������ʾ����ˣ�һ������ union �ṹ�Ŀɶ��ԺͿ�ά���Կ��¶�����ô����

�ܽ�

���õ����ԣ���Ҫע���ʿɶ�ֹ����Ҫ�����Ƹ���̫���ӡ�

��

ģ���Ŀɱ�����

˵��

Ϊģ�巽���ṩ��������ͨ�����Ŀɱ�����������...��֧�֡�

�ŵ�

  • �ɼ����ط���һЩ����ģ���Ĺ��������磺����ʵ������ָ��ģ�����еġ�operator->*()������Աָ�������ã��������Լ�һЩ�����ڡ�printf����ģ�巽����

ȱ��

  • �ޡ�

�ܽ�

�����У�Ҳ�Dz�©�͵����ԡ�

��

�µ��ַ����ͺ��ַ�������ֵ����

˵��

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 ʱ�������Ķ�/ά��ʱ����֮����Ȩ�⣬Ӧ���á�

��

�̱߳��ش洢��TLS��

˵��

�±�׼�У���thread_local���洢��������ָ��һ�� TLS��

�ŵ�

  • C++11 �й涨�κο���ʹ�á�static���洢���ĵط���������ʹ�� thread_local��Ҳ����˵���������������δ��й��졢���������Ķ�����ʹ�� TLS �������dz����㡣

ȱ��

  • �� thread_local ���嵽ʵ�ʲ���ϵͳ TLS Slot API ֮���ķ�װ��ӳ�����ܴ�������������ʱ������

�ܽ�

���õĶ���������ֱ��ʹ�ò���ϵͳ�� TLS Slot ��Ȼ��������������ʽ�Ŀ�������ͨ���� TLS ��ȡҲû��̫�ߵ�Ч��Ҫ�󣨵�Ȼ����Ҫ��ʹ�û����������㷨Ҫ��Ч���У���

��

��ʽĬ�Ϻͽ��÷���

˵��

C++11 �У��û�����ͨ����= default����׺���η���Ϊÿ������ʽָ��Ĭ�Ϲ��캯����Ҳ����ͨ����= delete����׺���ι��캯���͸�ֵ�Ȳ�����ͨ������ʵ�ֽ�ֹ���Ƶ����壩��

�ŵ�

  • �ܹ�ͨ����ȷ�ķ�ʽ��ʽ�޶���Щ���ⷽ����������ǿ�����Ŀɶ��ԺͿ�ά���ԡ�

ȱ��

  • �ޡ�

�ܽ�

�Ǵ�ͳ�ģ�ͨ�������������͸�ֵ��������Ϊ private ����ֹ���ƻ�������������������Ʒ��

��

long long ����

˵��

C++11 ��������ȷ������ 64 bit �� long long ���͡�

�ŵ�

  • �ޡ�

ȱ��

  • �ޡ�

�ܽ�

����ʲô��˵���أ�ͬ����һ�����͸��У����Ҹ�������������֧�ֵ����ԡ�

��

static_assert

˵��

���� assert����רΪģ������������ assert ������ʱ�ż��飬static_assert ��ģ��ʵ����ʱִ�С�

�ŵ�

  • ����ʵ��������ģ����������У�顣

ȱ��

  • �ޡ�

�ܽ�

�����ͼ���ģ����Լ�ĺ÷�����

��

���� sizeof ����ֱ�����������ij�Ա

˵��

���� sizeof ����ֱ�����������ij�Ա�����磺��sizeof CMyClass::m_nValue����

�ŵ�

  • ����ģ�嶨�������÷���һ�㡣

ȱ��

  • �ޡ�

�ܽ�

C++03 ��Ȼ���������ƣ���sizeof CMyClass::m_nValue����д������Ҳ���� sizeof �����������ij�Ա�����磺��CMyClass iTest; return sizeof(iTest.a)��֮�ࡣ���ҳ������Ȳ�֪�����͵�ģ�����⣬����ûʲô�ط���Ҫ��ô�� sizeof �ġ�

��

����Ŀ¼


��׼��

��׼���ı仯�����ɷ�Ϊ�����������ͣ�
  1. Ϊ��Ӧ�µĺ������Զ������ĵ����͸Ľ������磺Ϊ����ʵ�ֻ�����ֵ���õ��ƶ����幹�췽����Ϊģ��ʹ�� decltype �Ϳɱ����������� UTF-32��Windows���� UTF-16��linux/un*x���ַ���֧�ֵȵȡ�
  2. Ϊ��֧�ֻ����õ����Ϻ������Զ����������ԣ����� tuple��initializer_list �ȵȡ�
  3. �����ӵĹ��ܡ�
  4. ����ɢ�б���std::unordered_set��std::unordered_map������֮�������ô��ֵĶ���һ�����֣���ο������֮�顣

���£����ǽ�����������������������ѡ�������ۣ�

�߳�֧��

˵��

�µı�׼���ṩ�˶��̡߳�������������������ԭ�������ڴ����ϣ��ο����ദ�����������߳�ͬ���ĸ߼������� �Ļ���֧�֡�����Ȼ������Ӧ����Щ��Ҫ���ڡ��ȶ�����Ч���е� Deamon / Service ����������

�ŵ�

  • ����ǿǿ���Դպ��õ��߳̿���������
  • �ṩ�˱Ƚ�������ԭ���������ӿڣ�����֧�� Acquire / Release �������ڴ����ϡ�

ȱ��

  • ���ṩ���������̲߳��������̵߳ij�ʱ�ȴ�������/�ָ������ȼ�/�����㷨�л�/��ռʽ�������á�������ճ���ԣ�CPU Affinity��/���Ѵ��������á�����ջ/�ύջ�ߴ����á�ʱ��Ƭ���ȿ��ƣ��磺������ǰʱ��Ƭ��ǿ���л��������̵߳ȣ����Լ��̶߳����Զ����٣�fire and forget ���壬��ֻ�� detach ģʽ������Ҫ����ȱ���㹻֧�֣�����֧����ʵ��ʹ�û��������ṩһ�� native_handle() ������һ�и����Ӹ��û�������һ�ֺܲ������εı��֣��� Stroustrup �ڡ�The C++ Programming Language��������ǿ���ġ���׼��Ҫô�Ͳ��ṩһ�����ԣ�Ҫô���������ṩ���ڸ����Ե����в�����֮������ȫ�������ۡ�
    ��
  • û���ṩ��ȡ���ߺ����ô����������Լ������������������磺Package Node��NUMA Node��SMT/HT Unit������Ҫ��Ϣ�Ĺ��ߡ���Щ�����漰���ܷ������ú��߳�/�̳߳صĹؼ���Ϣ��
    ��
  • �ṩ�˺��õĵݹ黥���������ܺá����ǣ�
    • ����������ʹ�ø�Ч�� FUTEX / Critical Secion ���ǵ�Ч�� kernel ʵ����ȫ�����˿������߾�����
    • ȱ����ʱ�ȴ�����ʱ Lock��������
    • ȱ����������Spin lock��֧�֡�ʵ���������ڶദ�������£�ʹ���������� FUTEX ���ϵķ��������Խ���Ч��������ʮ�����ٱ���
      ��
  • ȱ���ź���֧�֣���Ȼ����ͨ������������������ģ���ź����������������ɻ������ܲ����ϴ���Ӱ�졣
    ��
  • POSIX ��׼�涨�����۳ɹ����������������� wait ����������֤�� mutex ������״̬����״̬��Ҫ�� wait ���غ����û������ж�����֪����׼�������ⷽ������ô�����ģ�
    ��
  • ����ͬ�����߶����ṩ�������汾������֧����������������������������
    ��
  • ��֧���̳߳أ���Ҫ�û��Լ��㶨�����û�Ҫͨ�����еĹ���ʵ��֧�ֳ�ʱ�ȴ�������/�ָ������ȼ�/�����㷨�л���������ճ���ԣ�CPU Affinity���ȵ����Ե��̳߳�ģ���������dz������롣
    ��
  • ��֧����Ϣ���С���֧��������/������������֧�ֶ���/д������˳����һ�£�������Щ��Ϊ���ӵ����㷨��Spin Lock/FUTEX/FUSEM ֮�༼�ɶ�Ч�ʵ������͸�Ϊ���ԣ���Ϊÿ��������������Ҫ�漰����ͬ�������IJ�����

�ܽ�

ԭ���������Ľӿ��������ĸߣ����������߳̿���Ψһ������ο�ط�������Ч�ʾ������Σ���Ҫ�������̱�׼���ı����ˡ����ݾ��飬5 ���ڸ���������������ò�ƺ��Ѱ�һ���¼�����׼���������Ż����ӽ�����״̬��

����ԭ�������������ಿ�֡���Ҳ���ɹ�ҵ����������һ�����ν���į�ɡ�

��

��������ʽ

˵��

�µı�׼��֧�������������滻��

�ŵ�

  • ������һ���ޱȳ��õĹ��ܣ���֧�ֶ�û�����ˡ�

ȱ��

  • ����Ҳ��һ����Ч�ʺ����еĹ��ܣ���Ч�ʸ��ײ�����������ϵ��������������������ʹ�� DFA/NFA �͸����Ż��㷨����ƥ��Ч�ʡ�
  • ������׼��ֻ֧�� POSIX BRE / ERE ��׼���������������Dz����ġ�����֧����չ���﷨����׼����û����ȷ���壿�� Vim ������Perl ���񣿻��� TCL ARE ������
  • �� Unicode ֧�����Σ����磺�ַ��� ��\d���� ��[:digit:]���ܷ�ƥ������ȫ�ǡ����������Լ������ַ���һ����Ҽ�������ȵȣ��ⲿ���� C++11 ��׼������ȷ���廹��Ҫ�������̵����飿

�ܽ�

����Ҫ����һ��������Ŀ�Ļ�����ô����ʽʹ��ǰ���迼��һ��ʱ�䣬������Ҫ�����������������̵�֧�̶ֳȺ�ʵ�ַ�ʽ��

��

����ָ��

˵��

TR1 �����ṩ��֧�����ü���������ָ�롣

�ŵ�

  • �������ˣ���ϲ�ɺء�

ȱ��

  • �����Զ������ٲ��ԣ���Ҳʹ��ÿ������ָ�������ж��˸�һ�� deletor ��Ա����������ָ�����ֱ����ߴ��ͺ�С�ľ�������˵����һ�� deletor ��Ա�Ǹ��󸺵�����ʵ���ٲ�����ȫ����ͨ��ģ���������ݣ�������ռ���ڴ��ռ���Ҳû���κζ���������ʱ������
  • ǿ��ʹ��ԭ�������޷��Զ������ü��������͡�������ijЩ����Ҫ�ڵ��̻߳�����ʹ�õ�����ָ�룬ʹ����ͨ�����������ü������ɡ�����ʱ�ܽ�ʡ����������
  • ��֧�����ü������������羭���� AddRef / Release������̬����������Ȩת���ȸ�Ч������ �������֣����ε���Щ�߼����������ڲ������ȶ��Ĵ��룬������������˵����Щ�������Դ������ߵ�Ч�ʺ͸������÷���
  • ��֧�� NULL ֵ�Զ��塪���ͺ����������ж�����ͨ�� delete ��������һ����Ҳ�������С�ָ�롱����Чֵ���� nullptr�����磺��ʹ������ָ���������ļ��� socket ����ʱ���� deletor Ӧ���� close / closesocket / CloseHandle ֮���ĵ��ã����䡰NULL��ֵӦ������Ч������ͨ���� -1�������� NULL ��Ӧ�� 0 ֵ���෴��0 ֵһ���ǺϷ���������

�ܽ�

Ӧ���������������ԣ���Ч�ʺ͹���������Ҫ�������������в��㡣

��

������������

˵��

�¿����ṩ������α��������������

�ŵ�

  • �϶��ȴ�ͳ�� rand Ҫ���ʡ�

ȱ��

  • �����ж����ʣ��� Windows ƽ̨����ʹ�� Crypto API ȡ���ӵ������� un*x ƽ̨����ʹ�� /dev/random ��������ȡ�����������������ɵľ����㷨��ʲô���㷨�жཡ׳���㷨Ч�����Σ�һ�ж��д���׼�����߶��᣿

�ܽ�

Ҫ����������������ѧ�����Ļ�������������Ҫ���ڸ��ٴ����������������ij��ϣ����磺����Ӳ�̣�Ҳ��������

XMR ����: 851299mKHBZhEEkQfbVBM6NgvUbACdeBoNxqppeuUgfL9vi3f1JpXGWAfBThKMK6XT38wpUU9vPC8AYzxQUooGxt2wi38D7