C++ 11学习

2023-11-03

原始字符串字面量, 就不需要转义引脚. 原始字符串字面量以R"(开头, 以)" 结尾:

string str = R"(Hello World!)";

c++中 nullptr无法意识转换为整形, 但是可以隐式匹配指针类型, 在C++11校准下, 相比NULL和0, 使用nullptr初始化空指针可以领我们编写的程序更加健壮.

预处理, 编译, 汇编, 链接4个阶段

常量表达式和非常量表达式的计算时机不同, 非常量表达式只能在程序运行阶段计算出结果, 但是常量表达式和计算往往发生在程序的编译阶段, 这可以极大提高的执行效率,

建议 const 和constexpr 的功能区分开, 即凡是表达"只读" 语言的场景都使用const, 表达常量语义的场景都是用constexpr

在定义常量时, const 和 constexpr 是等价的,

const int m = f(); // 不是常量表达式, m的值只有运行时才会获取
const int i = 520;  // 是一个常量表达式
const int j = i+ 1;  // 是一个常量表达式

constexpr int i =  520;  // 是一个常量表达式
constexpr int j = i + 1; // 是一个常量表达式

对于C++11内置类型的数据, 可以直接用constexpr 修饰, 但如果自定义的数据类型(struct或者class实现), 直接用constexpr
修饰是不行的



std::lock_guard 用法:

创建lock_guard对象时,它将尝试获取提供给它的互斥锁的所有权。当控制流离开lock_guard对象的作用域时,lock_guard析构并释放互斥量。

它的特点如下:

创建即加锁,作用域结束自动析构并解锁,无需手工解锁
不能中途解锁,必须等作用域结束才解锁
不能复制

static std::mutex page_mutex;



void set_page(int page)
{
    std::lock_guard<std::mutex> lock(page_mutex);
    if(ui_page != TOOL_PAGE)
	{
		ui_page = page;
	}
}
std::nothrow
1、在内存不足时,new (std::nothrow)并不抛出异常,而是将指针置NULL。

若不使用std::nothrow,则分配失败时程序直接抛出异常。

2、使用方式:
glog = new(std::nothrow) 对象;

if (glog == NULL)
{
	return -1;
}

::fwrite_unlocked(&magic, 1, sizeof(int), _file);
应该是对文件近些写入操作, 知道怎么用就行

::fwrite_unlocked(&magic, 1, sizeof(int), _file);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 11学习 的相关文章