CplusCplus
文章平均质量分 67
C++
大大潘大星
这个作者很懒,什么都没留下…
展开
-
Pure virtual function called
Pure virtual function called原创 2024-02-06 11:04:37 · 358 阅读 · 0 评论 -
C++ Thread
3).传入一个Function,function可以是lambda,全局函数,std::function的对象,函数对象,C++20之后也可以是std::invoke。2). 移动语义的构造方式:thread( thread&& other ) noexcept;如果当前线程是joinable将会发生std::terminate()线程join之前始终需要判断joinbale避免terminate报错。1). 默认构造函数: thread() noexcept;detach之后的线程不能join会报错.原创 2023-12-25 11:27:05 · 389 阅读 · 0 评论 -
tuple元组
std::tuple理论上可以有无数个任意类型的成员变量,而std::pair只能是2个成员,因此在需要保存3个及以上的数据时就需要使用tuple元组了。4 获取元素的类型std::tuple_element::type。5 获取元组大小 std::tuple_size::value。原创 2023-12-22 17:23:44 · 367 阅读 · 0 评论 -
虚函数表拾遗
析构的顺序与之相反,派生类析构函数运行完之后虚函数表指向基类的虚函数表, 基类的虚函数表运行完之后虚函数表彻底释放。如果在构造函数中调用虚函数,会先调用父类中的实现,也就失去了多态的性质。基类A的析构函数开始运行时,也就是说基类析构函数运行前派生类析构函数开始运行前,虚函数表发生改变。基类A的构造函数开始运行后(进入构造函数),也就是进入函数前已经把改类的虚函数表构建完成。派生类B的构造函数开始运行后,虚函数表指向了派生类虚函数地址。此时虚函数表的函数都指向基类的地址。原创 2023-12-21 17:27:05 · 388 阅读 · 0 评论 -
C++ lambda
PS:如果 lambda 函数标有 noexcept 而函数体内抛出了异常,又或者使用 throw() 限定了异常类型而函数体内抛出了非指定类型的异常,这些异常无法使用 try-catch 捕获,会导致程序执行失败。值得一提的是,如果 lambda 函数体内只有一个 return 语句,或者该函数返回 void,则编译器可以自行推断出返回值类型,此情况下可以直接省略-> 返回值类型。PS:对于以值传递方式引入的外部变量,lambda 表达式修改的是拷贝的那一份,并不会修改真正的外部变量;原创 2023-12-20 13:31:36 · 952 阅读 · 0 评论 -
constexpr
我们知道,函数的使用分为“声明”和“定义”两部分, 普通的函数调用只需要提前写好该函数的声明部分即可(函数的定义部分可以放在调用位置之后甚至其它文件中),但常量表达式函数在使用前,必须要有该函数的定义。常量表达式函数的返回值必须是常量表达式的原因很简单,如果想在程序编译阶段获得某 个函数返回的常量,则该函数的 return 语句中就不能包含程序运行阶段才能确定值的变量。模板函数的类型 T 为 int 类型,实例化后的函数符合常量表达式函数的要求,所以该函数的返回值就是一个常量表达式。原创 2023-12-20 14:21:36 · 356 阅读 · 0 评论