
C++
文章平均质量分 51
拉车看路
低头拉车,抬头看路。
展开
-
【求助】C++的比较函数里不要出现>=和<=
似乎在C++里定义比较函数的时候,使用>=或原创 2023-03-26 18:47:11 · 182 阅读 · 0 评论 -
类对象的operator->套娃展开
文章目录原创 2022-05-11 21:56:03 · 259 阅读 · 0 评论 -
模板函数、类成员模板函数的偏特化
模板函数和类成员模板函数均不支持偏特化原创 2022-03-31 20:47:47 · 533 阅读 · 0 评论 -
实现C++变参模板函数和类
现在我们要实现一个函数,它可以接受任意个数、任意类型的入参,函数会依次打印出这些参数的值。使用c++的变参模板实现这个函数:void PrintArgs(){ std::cout << std::endl;}template <typename T, typename... Args>void PrintArgs(T t, Args... args){ std::cout << t << " "; PrintArgs(a原创 2022-03-18 20:54:30 · 1075 阅读 · 0 评论 -
模板的模板参数template template parameter
以Stack为例,一个普通的模板类:template <typename T>class Stack {public: void Push(T item); T Pop();private: std::vector<T> container_;};模板参数T表示Stack中保存的元素的类型,底层使用vector存储元素。如果我们想指定Stack里实际存储元素的容器类型,可以使用模板模板参数(template template paramete原创 2022-03-18 19:27:46 · 846 阅读 · 0 评论 -
什么是类成员指针
有下面一段C++代码:#include <iostream>class Node {public: int val_; Node *left_; Node *right_; Node(int val) : val_(val), left_(nullptr), right_(nullptr) {}};int main(){ int Node::* val = &Node::val_; Node * Node::* left =原创 2022-03-16 21:51:10 · 795 阅读 · 0 评论 -
【求解惑】变参函数模板出现segment fault?
在学习变参函数模板的时候,运行如下代码时,出现了段错误:tem.h#ifndef TEM_H#define TEM_H#include <set>#include <memory>#include <iostream>class Base {};class Derive1 : public Base {};class Derive2 : public Base {};class Derive3 : public Base {};class Mn原创 2022-03-15 23:31:21 · 444 阅读 · 0 评论 -
C++的左值和右值
C++里的表达式分为左值和右值,最初这是根据表达式在赋值运算=的左边还是右边区分的,但随着C++的发展,对左值右值的定义有了一些变化。一种说法是,左值表达式是可以取其地址的(使用&运算符);而右值表达式不行。现代C++中,对左右值有更复杂的分类:简单来讲,lvalue是左值(可对其取地址);xvalue和prvalue是右值。prvalue包括临时对象、非字符串常量的字面值等;xvalue包括std::move()的返回值等。对某个具体的类型X,X&只能接收左值,X&&原创 2022-03-11 23:39:58 · 1188 阅读 · 0 评论 -
【求解惑】C++ ->*是个什么操作
疑问如下:(1) left和right到底是个什么变量,为啥值会是1?它们和root变量有什么相同点和不同点?(2) 对root和left、right执行->*返回的是啥?是不是同时执行了operator->和operator*?为啥traverse最终返回的是指向4的节点的指针?原创 2022-03-05 10:40:44 · 439 阅读 · 0 评论 -
为什么模板的定义要和声明放在一起
对于一个普通的符号f,编译器对它做的事情如下:(1)编译时:包含f的定义(实现) 的源文件输送给编译器,编译器会编译相关代码并将结果打包到对应的.o里;(2)链接时:当某处需要使用符号f,便通过符号的声明寻找符号的实现,如果没找到某个符号的实现,就被报undefined错误。对于非模版的符号,编译器会如上正常执行。但对于模板类和模板函数,由于它的符号是抽象的,如f<T>(T)和A<T>::f()中的T是未知的。所以在(1)时不会把“符号”的实现打包到.o。(2)时,实例化模板时,编译器才会看到原创 2022-02-28 23:55:38 · 624 阅读 · 0 评论 -
为什么list不能使用全局sort函数
如果我们想给一个`list`排序,无法使用`C++`标准库中全局的`sort`函数,而要使用`list`自定义的`sort`函数。原创 2022-02-27 15:50:47 · 926 阅读 · 0 评论 -
原来函数指针是这么声明的
文章目录今天看到了一个符号的声明,给我整懵了。void (* set_malloc_handler(void (*f) ())) ();经过一系列分析后,得出结论:set_malloc_handler是个函数,它的返回值和唯一的形参都是函数指针。要想知道一个符号到底表示的是指针还是函数,应该按优先级看离它最近的运算符是什么。函数调用()运算符的优先级高于解引用*。比如(*f)表示f是个指针,而它的类型声明为void (*)(),即函数指针,指向的函数的类型为void()(无返回值,无参数)。原创 2022-02-18 23:29:19 · 1165 阅读 · 0 评论 -
C++关键字new和delete
newnew[]new(...)new[](...)deletedelete[]... ...原创 2021-09-21 21:03:32 · 365 阅读 · 0 评论 -
MacBook Air M1配置Vscode C++环境
文章目录下载安装安装相关依赖创建代码配置.jsontasks.jsonlaunch.jsonc_cpp_properties.json下载安装从vscode官网下载地址下载安装包,选择Apple Silicon下载完成,好像会自动安装双击即可打开如果诸位的英文水平还可以,建议后面的配置过程直接参考官方文档config-clang-mac以下是本人的配置过程,供参考。。。安装相关依赖C/C++插件简体中文lldb适配器苹果公司为自家系统定制了clang+llvm编译器和原创 2021-09-21 10:56:02 · 7635 阅读 · 3 评论 -
inline符号的作用域
编译时,声明为inline的符号在调用处展开,减少运行时的开销,同时增大可执行文件的大小。本文要讨论的是`inline`符号的**作用域**。原创 2021-09-19 16:04:47 · 437 阅读 · 0 评论 -
C/C++程序编译过程及混合编译
预处理、编译、汇编、链接extern "C"的用法原创 2021-05-01 18:01:20 · 361 阅读 · 1 评论 -
shared_ptr隐患之重复释放堆对象
shared_ptr重复释放堆内存原创 2021-01-08 23:04:41 · 2104 阅读 · 0 评论