python 基础语法笔记
c++基础语法
引用和指针
引用是个标识符,不是对象;指针是一个对象,有值有地址,它的值就是某个对象数据的地址;
1 | int a = 3; |
上述代码最后一行是一个指向int类型指针的引用。
int* & rp
: 这里rp
是一个引用,引用一个指向int
类型的指针。可以将其读作"rp
是一个对指向int
的指针的引用"。=
: 这是一个赋值运算符,用于将右侧的值赋给左侧的变量。p
:p
是另一个指向int
类型的指针。
note:没有指向引用的指针,因为引用不是对象,没有地址之类的东西。
参考:https://www.zhihu.com/question/37608201
模版类和模版函数
模版这个语法是用来提高代码的可重用性,减少开发的代码量和工作量。
参考:
- https://zhuanlan.zhihu.com/p/101898043
- https://juejin.cn/post/7078530622527897631
const 修饰符
在函数后面加上const的作用?(常量成员函数)
参考:
https://zhuanlan.zhihu.com/p/94868121
在这个函数声明中,const
关键字用于修饰成员函数。它表示该成员函数是一个常量成员函数,也称为常量方法。常量成员函数是在类中声明为const
的成员函数。
常量成员函数有以下特点和作用:
不修改对象的状态:常量成员函数承诺在函数体内不会修改对象的任何数据成员。它们只能调用对象的其他常量成员函数,或者读取对象的数据成员,但不能修改它们。
适用于常量对象:常量成员函数可以在常量对象上调用。常量对象是通过
const
关键字修饰的对象,它的数据成员是不可修改的。常量成员函数允许在这些常量对象上进行操作,因为它们不会改变对象的状态。增加对象的可访问性:将成员函数声明为常量成员函数可以使其在常量对象上可访问。这样,即使对象是常量,仍然可以调用该成员函数,而不会违反对象的常量性。
在你提供的函数声明中,get_val
被声明为一个常量成员函数。这意味着在函数体内,get_val
不会修改对象的任何数据成员。它可以被常量对象调用,并且不能调用其他非常量成员函数(除非它们也被声明为常量成员函数)。
以下是一个示例,展示了常量成员函数的使用:
1 | class MyClass { |
在上述示例中,get_val
函数被声明为常量成员函数,并在常量对象obj
上进行调用。函数体内不修改任何数据成员,只是读取了数据成员constantValue
的值,并进行了计算。因为get_val
是常量成员函数,所以可以在常量对象上调用它,而不会违反对象的常量性。
声明与定义
参考:
https://zhuanlan.zhihu.com/p/74528787
函数指针
参考:
https://www.runoob.com/w3cnote/cpp-func-pointer.html
回调函数
参考:
https://www.cnblogs.com/zzw19940404/p/14152151.html
https://blog.csdn.net/weixin_41605937/article/details/120248917 python的回调函数的讲解
typedef
typedef void (*FunctionPtr)(int);
// 将函数指针类型定义为 FunctionPtr,它指向一个接受 int 参数且返回 void 的函数
上面这个函数指定的别名,名字在中间,和正常的不太一样。
多态 virtual
参考:https://zhuanlan.zhihu.com/p/37340242
lambda表达式
参考:https://www.cnblogs.com/DswCnblog/p/5629165.html
Const 与指针
代码:
luo机器上的/mnt/disk_drive/2022-JianYang/cpp_projects/cpp_basic
的const_point.cpp
。
参考:
https://www.cnblogs.com/lihuidashen/p/4378884.html
void*
指针
void*
指针可以指向任意类型的数据。
大部分情况下,void*
都是作为函数的一个参数,这个时候不是说你可以传递各种数据类型,比如int
,long
,double
之类的,而是你必须传递int*
,long *
之类,就还是必须要传递指针进来。
参考:
https://blog.csdn.net/bzhxuexi/article/details/17276675
https://zhuanlan.zhihu.com/p/98061960
c++中的cancellation point
在 C++ 中,Cancellation Point(取消点)是指某些特定的函数调用,它们在执行期间可以响应取消请求。取消请求是一种通知线程取消或终止其当前任务的机制。
当线程在执行某个函数时,如果遇到取消点,它会检查是否存在取消请求。如果存在取消请求,线程将执行取消操作,中断当前任务的执行,并根据具体情况采取相应的处理措施。这可以是线程退出、执行清理操作或进行其他适当的处理。
Cancellation Point 的存在是为了支持线程的取消机制,它允许外部实体(如另一个线程或信号处理程序)向执行中的线程发送取消请求,并在适当的时机进行响应。这对于长时间运行的任务或需要及时取消的任务非常有用,以避免资源浪费或无限期地等待。
在 C++ 标准库中,一些函数被指定为取消点,这意味着它们在执行期间会响应取消请求。这些函数包括 I/O 操作、线程相关的函数、互斥锁和条件变量相关的函数等。具体的取消点函数取决于实现和操作系统,可以在 C++ 标准库的相关文档中找到。
需要注意的是,并非所有的函数调用都是取消点。在 C++ 中,取消点的位置是由实现定义的,并且可能因操作系统、编译器或库的不同而有所变化。因此,在编写多线程应用程序时,应该了解哪些函数是取消点,并在必要的情况下进行适当的处理,以确保取消机制的正确运行。
总而言之,Cancellation Point 是指那些可以响应取消请求的特定函数调用,在 C++ 中用于支持线程的取消机制。(来自chatgpt的回答)
namespace是什么?
是c++的关键字,它可作为附加信息来区分不同库中相同名称的函数、类、变量等
参考:https://www.runoob.com/cplusplus/cpp-namespaces.html
智能指针
智能指针和RAII
技术是相同的功能,都是让操作系统管理资源占用空间释放的。
内存布局
c++ static 关键字
参考:https://zhuanlan.zhihu.com/p/37439983
c++的异常处理
c++ explicit关键字
参考:https://www.cnblogs.com/rednodel/p/9299251.html
c++ errno用法
参考:https://blog.csdn.net/u011866460/article/details/40888943
linux cron 定时器
参考:
https://www.runoob.com/w3cnote/linux-crontab-tasks.html
c++ std::function用法
#define 宏的使用
参考:https://zhuanlan.zhihu.com/p/406699187
c++ ACM 输入输出
参考:
https://blog.csdn.net/weixin_44966641/article/details/122247439
https://zhuanlan.zhihu.com/p/494535515
stat
结构体的作用
在 C++ 中,stat
结构体是用于获取文件或文件夹的元数据信息的结构体。它定义在 <sys/stat.h>
或 <sys/types.h>
头文件中,提供了一些字段来描述文件的属性。
以下是 stat
结构体的定义:
1 | struct stat { |
在使用 stat
结构体之前,需要包含相应的头文件,并通过调用 stat
函数来填充该结构体。例如,可以使用以下代码获取文件的元数据信息:
1 |
|
在上述代码中,我们定义了一个 struct stat
类型的变量 fileStat
和一个文件路径 filePath
。然后,通过调用 stat
函数并传递文件路径和 fileStat
变量的地址,可以获取文件的元数据信息。接下来,我们可以使用 fileStat
中的字段来访问相应的信息,例如文件大小 (st_size
)、所有者ID (st_uid
) 等等。
请注意,stat
函数返回 0 表示成功获取文件的元数据信息,否则返回 -1 表示失败。在失败的情况下,你可以根据具体的需求进行错误处理。
希望这个解释能帮助你理解 stat
结构体在 C++ 中的用法。如果你有任何进一步的问题,请随时提问。
sizeof的使用,与strlen的区别
sizeof对对象或表达式进行计算字节数;strlen统计字符串的字符个数;
sizeof不对传进来的表达式进行计算,只会评估这个表达式的类型,计算其类型的字节数。
例子:
1 | char arr[10] = "hello"; |
c++可变参数
参考:https://zhuanlan.zhihu.com/p/104450480