#include

时间:2023-03-10 00:22:06
#include <iostream>

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是假的

//调试代码,迅速找出代码错在哪一行

 #include <iostream>

 void main()
{
int num();
short sh(); //调试代码,迅速找出代码错在哪一行
static_assert(sizeof(num) >= , "代码报错 num");//因为sizeof(num) == 4,所以为真,编译成功 static_assert(sizeof(sh) > , "error sh");//因为sizeof(sh) == 2,所以为假,编译失败
//error sh system("pause");
}

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(),函数模板直接引用

 #include <iostream>
using namespace std; template <class T>
void com(T arg)//模板函数引用无效,因此需要引用包装器
{
arg++;
std::cout << "void com(T arg) " << &arg << std::endl;//地址不一样
} void main()
{
int count();
int & rcount(count);//引用 std::cout << "原来的值" << count << std::endl;// com(&count);//参数是地址 std::cout << "参数是地址" << count << std::endl;//仍然10 com(rcount);//参数是引用 std::cout << "参数是引用" << count << std::endl;//仍然10 std::cout << "main " << &count << std::endl;//地址不一样 //std::ref(变量名),函数模板直接引用
com(std::ref(count)); std::cout << "引用包装器" << count << std::endl;//变成11 system("pause");
}

4 std::string

字符串

//R"(可以把括号内部的转义字符去掉)"

 #include <iostream>

 void main()
{
//R"(可以把括号内部的转义字符去掉)"
std::string path = R"("D:\Program Files\Tencent\QQIntl\Bin\QQ.exe")"; system(path.c_str());//执行 system("pause");
}