bool operator==(CLASS const& a, CLASS const& b);
bool operator!=(CLASS const& a, CLASS const& b);
bool operator<(CLASS const& a, CLASS const& b);
bool operator>(CLASS const& a, CLASS const& b);
bool operator<=(CLASS const& a, CLASS const& b);
bool operator>=(CLASS const& a, CLASS const& b);
ostream& operator<< (ostrea& os, CLASS const& p);
void swap(CLASS& a, CLASS& b);
shared_ptr casts:
shared_ptr<T>(static_cast<T*>(r.get()))是错误的,应该使用static_pointer_cast
shared_ptr<T>(dynamic_cast<T*>(r.get()))是错误的,应该使用dynamic_pointer_cast
shared_ptr<T>(const_cast<T*>(r.get()))是错误的,应该使用const_pointer_cast
--------------------------------
weak_ptr
enable_shared_from_this
Example:
struct X: public enable_shared_from_this<X>
{
};
int main()
{
shared_ptr<X> p(new X);
shared_ptr<X> q = p->shared_from_this();
assert(p == q);
assert(!(p < q ) && !(q < p)); // p and q share ownership
}
----------------------
3 Function objects
result_of
mem_fn
bind
is_bind_expression
is_placeholder
namespace placeholders
bad_function_call
template<class T> class function
-----------------------------------
4 Metaprogramming and type traits
-----------------------------------
5
tuple
array
undorered associative container
unsupported expressions:a == b,a != b,a < b,a > b,a <= b,a >= b
-------------------------------------------------------------------------------------------
regex 通配符
1.点号(.) 可以匹配任意单个字符,是单字符的通配符。
2.^匹配行的开头。
3.$匹配行的结尾。
4.()用于定义一个正则表达式匹配子元素(子表达式),可以被引用或者重复。
5.*表示前面的元素可以重复任意多次(n>=0)。
6.+表示前面的元素可以重复1次或者多次(n>=1)。
7.?表示前面的元素可以重复0次或者1次(n=0,1)。
8.{}可以手工指定元素重复的次数。{n}重复x=n次,{n,}重复x>=n次,{n,m}重复n次到m次之间的次数,即n<=x<=m。
9.[]用于定义字符集和,可以列出单个字符,也可以定义范围,或者是集合的补集。
10.\是转义字符(与c/c++类似),特定字符转义后与自身匹配。
11.|表示逻辑或的概念,匹配它两侧的元素之一。
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。
(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern) 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始