C++不懂的知识点记录

本文详细介绍了C++编程中的宏定义、智能指针、局部静态变量、void指针和map的使用。同时,探讨了Linux命令的基本语法、常用的vim编辑器命令以及chmod命令的参数和用法。还涉及VSCode的配置,包括MinGW的下载和安装。文章内容丰富,涵盖了编程和开发环境的多个方面。
摘要由CSDN通过智能技术生成

一. 宏定义#define的知识点

https://www.cnblogs.com/wanqieddy/p/4377937.html

二. vscode配置

参考内容是:https://www.cnblogs.com/bpf-1024/p/11597000.html.

  1. 下载MinGW
    下载地址:https://sourceforge.net/projects/mingw-w64/files/
    下载的文件:进入网站后不要点击 “Download Lasted Version”,往下滑,找到最新版的 “x86_64-posix-seh”。

三. C++

  1. 类对象的创建方法:
#include <iostream>
using namespace std;

class A
{
private:
    int n;
public:
    A(int m):n(m){}
    ~A(){}
};

int main()
{
    A a(1);  //栈中分配
    A b = A(1);  //栈中分配
    A* c = new A(1);  //堆中分配
  delete c;
    return 0;
}

2.智能指针的用法
https://www.cnblogs.com/jiayayao/archive/2016/12/03/6128877.html
std::shared_ptr p1(new Person(1));// Person(1)的引用计数为1
3. stati局部变量
static局部变量只被初始化一次,下一次依据上一次结果值;

#include <iostream>   
using namespace std;   
  
void testLocalStaticObjects(int times)   
{   
    static int localStaticObj = 0;   
    localStaticObj++;   
    cout << "times:" <<times <<"/tlocalStaticObj:" << localStaticObj << endl;   
}   
  
int main()   
{   
    for (int i = 0; i < 5; ++i){   
        testLocalStaticObjects(i);   
    }   
    return 0;   
}  

4 void类型的指针
https://www.runoob.com/w3cnote/c-void-intro.html
void 指针可以指向任意类型的数据,就是说可以用任意类型的指针对 void 指针对 void 指针赋值。例如:

int *a;
void *p;
p=a;

如果要将 void 指针 p 赋给其他类型的指针,则需要强制类型转换,就本例而言:a=(int *)p。在内存的分配中我们可以见到 void 指针使用:内存分配函数 malloc 函数返回的指针就是 void * 型,用户在使用这个指针的时候,要进行强制类型转换,也就是显式说明该指针指向的内存中是存放的什么类型的数据 (int )malloc(1024) 表示强制规定 malloc 返回的 void 指针指向的内存中存放的是一个个的 int 型数据。
5. map
如果map不存在某个key-value对,我们强行访问这个key的话,那么就会生成一个value的默认值,把这个key-value对插进去。

#include <iostream>
using namespace std;
#include "unordered_map"
class Clock{
private:
    int hour,minute,second;
public:
    Clock(int h=5,int m=5,int s=5){hour=h;minute=m;second=s;}
    void setClock(int h,int m,int s){
        hour = h;
        minute = m;
        second = s;
    }
    void showClock(){
        cout<<hour<<minute<<second<<endl;
    }
};
int main() {
    unordered_map<int,Clock> map;
    Clock c1;
    c1.setClock(1,2,3);
    map[1] = c1;
    map[1].showClock();
    map[2].showClock();
    unordered_map<int,Clock>::iterator iter;
    for(iter=map.begin();iter!=map.end();iter++){
        iter->second.showClock();
    }
    return 0;
}

输出是:

123
555
555
123
  1. memcpy的知识
    https://blog.csdn.net/qq_26525215/article/details/49757949

7 explicit的用法
https://blog.csdn.net/qq_24127015/article/details/104412800
https://blog.csdn.net/readyone/article/details/112371671
https://blog.csdn.net/fengbingchun/article/details/51168728?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2defaultCTRLISTRate-3.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultCTRLISTRate-3.pc_relevant_antiscanv2&utm_relevant_index=5

四. Linux命令

1. 命令的语法

参考网址:https://www.cnblogs.com/haoyufang/p/11762583.html

1. 命令的一般格式

command [option]... [argument]...
command [options] [arguments]

具体说明:

(1)ommand: 表示命令的名称,如 ls

(2)option:定义命令的执行特性,可以有长短两种选项:

长选项:用 – 引导,后面跟完整的单词,如 --help
短选项:用 - 引导,后面跟单个的字符, 如 -a
(1) 多个短选项可以组合使用,例如: -h -l -a == -hla,但是长选项不能组合使用,如 --help后面就不能再跟另外一个单词了。
(2) option 也可以有自己的参数,注意:选项与选项之间,选项与参数之间,参数与参数之间必须有空格!
(3) argument:描述命令作用的对象,如/etc 就是ls 命令作用的对象。

2. 命令格式中的符号含义

在linux中,命令的选项和参数所使用的符号也有相应的含义:

尖括号< >:必选参数,实际使用时应将其替换为所需要的参数

大括号{ }:必选参数,内部使用,包含此处允许使用的参数

方括号[ ]:可选参数,在命令中根据需要加以取舍

小括号( ):指明参数的默认值,只用于{ }中

竖线|:用于分隔多个互斥参数,含义为“或”,使用时只能选择一个。

省略号…:任意多个参数。

3. 例子

1、[ --atime-preserve ],表示一个可选选项。
2、[ -B, --read-full-records ],表示一个可选选项,简写为-B,完整写法是–read-full-records,两者在用的时候只能选择其一,它们的功能都是完全一样的。一般带 “-”开头的选项都是简写,“–”开头的命令都是完整写法,并且,一般的选择都有一个简写,一个完整写法,简写写在前面,完整写法写在后面,中间用逗号 分割。
3、[ -b, --blocking-factor N ],表示一个可选选项,简写为-b N,完整写法是–blocking-factor N,N代表这个参数需要一个值,在详细描述中可以看到。当然,选项可以带参数,也可以不带参数,大部分选项是没有参数的,相当于控制开关。命令的书写 如:tar -b=10000 -cvf com.tar.gz com
4、[ -F, --info-script F --new-volume-script F ],表示有两个同时存在的可选命令,-F F --new-volume-script F,两个选项必须同时出现,在此,后面的选项没有简写。
5、[ -z, --gzip, --gunzip, --ungzip ],表示一个可选选项,它的写法有多种,除了-z之外,其他的都是它的完整写法。
6、[ -[0-7][lmh] ],表示嵌套的可选选项,0-7表示取值从0到7取一个。
在描述命令行参数的时候,对其格式有些约定俗成的写法,各系统之间也有差别。一般采用的格式如下:
命令 <必选参数1|必选参数2> [-option {必选参数1|必选参数2|必选参数3}] [可选参数…] {(默认参数)|参数|参数}

2 vim的一些自己大概率用到的命令

命令效果命令效果命令效果
:w保存修改,但是不退出文件$移动到行尾ynw复制n个单词
:w!强制保存但是不退出文件nG光标定位到第n行行首yy复制一行
:q!退出文件,不保存文件gg光标定位到第一行行首nyy复制n行
:wq退出文件,保存修改G最后一行行首p光标后开始复制
:set nu显示行号ctrl+f查看下一页内容P光标前开始复制
:set nonu取消行号ctrl+b查看上一页内容u撤销刚才操作
:set ic查找时不区分大小写dw删除一个单词ctrl+r恢复撤销操作
:set noic查找时区分大小写dnw删除n个单词0(是阿拉伯数字零)移动到行头
dd删除一整行^移动到本行第一个不是空的字符yw复制一个单词
dd删除一整行ndd删除n行

3. chmod命令

参考网址是:https://www.cnblogs.com/linuxandy/p/10881918.html

1. 群组的概念

当你在团队开发资源时,群组显得很重要,举例来说,现在有两个项目在同一个主机,第一个项目为ProjectA,成员有calss1,class2,class3;第二个项目为ProjiectB,成员有class4,class5,class6。位于同组的组员他们可以互相修改对方的数据,但是其他组的成员不能查看自己组的内容。
对每个用户设立权限是效率非常低的方法,我们可以将用户分组,让文件的权限按组分配,就能限制非自己群组的人不能阅览本组内容,但本组组员可以无限制的修改自己的文件,当然还可以设置连本组组员都不能访问我的文件。

2.参数解释

chomd命令的语法是

 chmod [-cfvR] [--help] [--version] [who] [+ | - | =] [mode] 文件名

-c : 若该档案权限确实已经更改,才显示其更改动作
    -f : 若该档案权限无法被更改也不要显示错误讯息
    -v : 显示权限变更的详细资料
    -R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
  --help : 显示辅助说明
  --version : 显示版本
操作对象who可是下述字母中的任一个或者它们的组合:
  u 表示“用户(user)”,即文件或目录的所有者。
  g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
  o 表示“其他(others)用户”。
  a 表示“所有(all)用户”。它是系统默认值。
操作符号可以是:
  + 添加某个权限。
  - 取消某个权限。
  = 赋予给定权限并取消其他所有权限(如果有的话)。
设置 mode 所表示的权限可用下述字母的任意组合:
  r 可读。
  w 可写。
  x 可执行。
  还有X,s,t,u,g,o等属性,用到再说吧。

例子

chmod ugo+r 1.txt  //将文件 1.txt 设为所有人皆可读取 
chmod a+r 1.txt  //将文件 file1.txt 设为所有人皆可读取
//将文件 1.txt 与 2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
chmod ug+w,o-w 1.txt 2.txt ```
```cpp
chmod u+x 1.py  将 1.py //设定为只有该文件拥有者可以执行
//将目前目录下的所有文件与子目录皆设为任何人可读取
chmod -R a+r *
//此外chmod也可以用数字来表示权限如
chmod 777 file   //这个详细的规则在参考网址里面
chmod abc file

五.常用功能

1 将时间转换成字符串并输出

#include <iostream>
#include <time.h>
using namespace std;
int main(){
time_t t = time(0);
char tmp[32];
strftime(tmp, sizeof(tmp), "%Y-%m-%d %H:%M:%S",localtime(&t));
cout<<tmp<<endl;
string temp_string = tmp;
string res = "123"+temp_string;
cout<<res<<endl;
}

六. Msys配置

msys可以当做一个linux命令行来使用。

  1. pacman -Sg:查看包
  2. pacman -S mingw-w64-x86_64-boost :安装这个boost.
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值