xCode中开启c++11支持:
Build Settings -> C++ Language Dialect 选 C++11 -> C++ StandardLibrary 选 libc++
lambda:
语法:
[capture-list](args-list) ->return-type {…}
可转类型:
function<return-type (args-type-list)>
lambda的类型是实现了
operator()
的匿名类型,可转成std::function<>
,但不是std::function<>,因此template<typename ...Args> void call(Args&& ...args) { std::cout << "call 1"; } template<typename ...Args> void call(std::function<void ()>, Args&& ...args) { std::cout << "call 2"; }
调用
call([](){});
输出call 1,而不是call 2要输出call 2,函数调用时要显式将lambda参数转成std::function类型:
call(std::function<void ()>([](){}))
range-based for:
遍历map:
for (auto& kv : aMap) { cout << kv.first << " has value " << kv.second << endl; }
非成员函数的
begin()
和end()
:要定义在CustomClass所在的namespace中取tuple中第i个元素:
std::get<i>(tuple)
string和number间互转:
string to_string(int val); string to_string(float val); … int stoi(const string& str, size_t *idx=0, int base=10); float stof(const string& str, size_t *idx=0); …
unique_ptr使用自定义deleter,例如:
template<typename T> using cc_unique_ptr = std::unique_ptr<T, std::function<void(void *)>>; template<typename T> cc_unique_ptr<T> make_unique(T *ptr) { if (ptr) ptr->retain(); auto deleter = [](void *p) { auto ptr = static_cast<T *>(p); if (ptr) ptr->release(); }; return cc_unique_ptr<T>(ptr, deleter); }
为enum指定underlying type:
enum E : short { kValue1, kValue2, ... }
,然后可以使用forward declare:enmu E : short;
强类型enum用关键字
enum class
声明,其枚举值不会暴露在surrounding scopeenum class Options {None, One, All}; Options o = Options::All;
可给函数方法添加后置标识符
override
(指明某函数重载父类函数)和final
(指明某函数不能被子类重载)支持正则表达式
<regex>