1 static_assert
2 std::nothrow
3 std::ref()
4 std::string
1 static_assert
执行编译时断言检查
语法
static_assert ( bool_constexpr , string ) (since C++11)
解释
bool_constexpr一个布尔常量表达式进行评估
string字符串文字,会出现编译错误,如果bool_constexpr是假的
//调试代码,迅速找出代码错在哪一行
1 #include <iostream> 2 3 void main() 4 { 5 int num(10); 6 short sh(10); 7 8 //调试代码,迅速找出代码错在哪一行 9 static_assert(sizeof(num) >= 4, "代码报错 num");//因为sizeof(num) == 4,所以为真,编译成功 10 11 static_assert(sizeof(sh) > 2, "error sh");//因为sizeof(sh) == 2,所以为假,编译失败 12 //error sh 13 14 system("pause"); 15 }
2 std::nothrow
处理内存耗尽
#include <iostream> struct big { double db[20000]; }; void main() { big *p; p = new(std::nothrow) big[100000];//处理异常 //p = new big[100000]; if (!p) { std::cout << "error" << std::endl; } system("pause"); }
3 std::ref()
实现引用包装器
//模板函数引用无效,因此需要引用包装器
std::ref(),函数模板直接引用
1 #include <iostream> 2 using namespace std; 3 4 template <class T> 5 void com(T arg)//模板函数引用无效,因此需要引用包装器 6 { 7 arg++; 8 std::cout << "void com(T arg) " << &arg << std::endl;//地址不一样 9 } 10 11 void main() 12 { 13 int count(10); 14 int & rcount(count);//引用 15 16 std::cout << "原来的值" << count << std::endl;//10 17 18 com(&count);//参数是地址 19 20 std::cout << "参数是地址" << count << std::endl;//仍然10 21 22 com(rcount);//参数是引用 23 24 std::cout << "参数是引用" << count << std::endl;//仍然10 25 26 std::cout << "main " << &count << std::endl;//地址不一样 27 28 //std::ref(变量名),函数模板直接引用 29 com(std::ref(count)); 30 31 std::cout << "引用包装器" << count << std::endl;//变成11 32 33 system("pause"); 34 }
4 std::string
字符串
//R"(可以把括号内部的转义字符去掉)"
1 #include <iostream> 2 3 void main() 4 { 5 //R"(可以把括号内部的转义字符去掉)" 6 std::string path = R"("D:Program FilesTencentQQIntlBinQQ.exe")"; 7 8 system(path.c_str());//执行 9 10 system("pause"); 11 }