C++
cc_rong
坚持
展开
-
《C++学习笔记》 new和delete
new//new表达式string *sp = new string ("a value");//分配并初始化一个string对象string *arr = new string [10];//分配10个默认初始化的string对象工作原理:实际执行了三步操作:第一步:new表达式调用一个名为operator new(或者operator new[])的标准库函数。该函数分配一块足够大的、原始的、未命名的内存空间以便存储特定类型的对象(或者对象的数组)。第二步:编译器运行相应原创 2021-12-30 21:59:21 · 513 阅读 · 0 评论 -
《c++学习笔记》--- 拷贝、赋值、销毁
拷贝如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。class Foo{pubilc: Foo() {}; //默认构造 Foo(const Foo& ) {}; //拷贝构造};赋值与拷贝构造函数一样,如果类未定义自己的拷贝赋值运算符,编译器会为它合成一个。重载赋值运算符:重载运算符本质上是函数,其名字由operator 关键字后接表示要定义的运算符的符号组成。因此,.原创 2021-12-23 22:02:22 · 314 阅读 · 0 评论 -
《c++学习笔记》 --- 类型转换
数值类型和字符串的相互转换std::string to_string(int value);std::string to_string(long value);std::string to_string(long long value);std::string to_string(unsigned value);std::string to_string(unsigned long value);std::string to_string(unsigned long long value)原创 2021-12-13 22:39:02 · 812 阅读 · 0 评论 -
《c++11学习笔记》 --- 处理日期和时间的chrono库
目录1、记录时长的duration2、获取系统时钟的clocks3、计时器timer1、记录时长的durationduration表示一段时间间隔,用来记录时间长度,可以表示几秒、几分钟或者几个小时的时间间隔。duration的原型如下:template<class Rep, class Period = std::ratio<1, 1>>class duration;第一个模板参数Rep是一个数值类型,表示时钟数的类型;第二个模板参数是一个..原创 2021-12-13 22:25:05 · 933 阅读 · 0 评论 -
《c++11学习笔记》 --- 线程
创建线程:使用std::thread创建线程,只需要提供线程函数或者线程对象。并且可以同时指定线程函数的参数。void func(){}int main(){ std::thread t(func); t.join(); return 0;}join函数会阻塞线程,直到线程函数执行结束,如果线程函数有返回值,返回值将被忽略。detach()方法,将线程和线程对象分离,线程不被阻塞执行。void func(){}int main(){ std::原创 2021-12-12 15:09:33 · 993 阅读 · 0 评论 -
《c++11学习笔记》 --- 智能指针(std::shared_ptr、std::uniq_ptr、std::weak_ptr)
目录std::shared_ptr共享的智能指针std::unique_ptr独占的智能指针std::weak_ptr弱引用的智能指针使用智能指针时需要引用头文件<memory>std::shared_ptr共享的智能指针shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存,在最后一个shared_ptr析构的时候,内存才会被释放。初始化:通过构造函数、std::make_shared<T>辅助函数和reset方法来初.原创 2021-12-08 22:25:06 · 1382 阅读 · 0 评论 -
《c++11学习笔记》 --- 转发和std::forward()函数
能按照参数原来的类型转发到另一个函数,这种转发被称为完美转发。完美转发,是指在函数模板中,完全依照模板的参数的类型(即保持参数的左值、右值特征),将参数传递给函数模板中调用的另外一个函数。C++11中提供了一个函数std::forward,它是为转发而生的,不管参数是T&&这种未定的引用还是明确的左值引用或者右值引用,它会按照参数本来的类型转发。template<typename T>void printT(T& t){ cout <<"lv原创 2021-12-07 22:11:31 · 445 阅读 · 0 评论 -
《c++11学习笔记》 --- std::move()函数
move只是转移资源的控制权,本质上是将左值强制转换为右值引用。使用move语义调用构造函数,避免了拷贝,提高程序性能。std::list<std::string> tokens;//初始化tokens......//将tokens移动std::list<std::string> t = std::move(tokens);...原创 2021-12-07 21:51:40 · 769 阅读 · 0 评论 -
《c++11学习笔记》 --- 右值引用(T&&)
左值:指表达式结束后依然存在的持久对象右值:指表达式结束时就不在存在的临时对象(由将亡值,纯右值这两个构成)纯右值:非引用返回的临时变量、运算表达式产生的临时变量、原始字面量和lambda表达式将亡值:c++11新增的,与右值引用相关的表达式。比如:将要被移动的对象,T&&函数返回值、std::move返回值和转换为T&&的类型的转换函数的返回值区分左值和右值的方法:看能不能对表达式取地址,如果能,则为左值。否则为...原创 2021-12-07 21:42:52 · 1797 阅读 · 0 评论 -
《c++11学习笔记》 --- std::function和bind绑定器
目录std::functionbind绑定器std::functionstd::function是可调用对象,是一个类模板,可以容纳除了类成员(函数)指针之外的所有可调用对象。可以用统一的方式处理函数、函数对象、函数指针。可调用对象:1)是一个函数指针。2)是一个具有operator()成员函数的类对象(仿函数)。3)是一个可被转换为函数指针的类对象。4)是一个类成员(函数)指针。//头文件#include<functional>void ..原创 2021-12-06 22:58:54 · 222 阅读 · 0 评论 -
《c++11学习笔记》 --- lambda表达式的用法
语法:[capture] (params) opt->ret { bady };capture:捕获列表params:参数列表opt:函数选项ret:返回值类型bady:函数体auto f = []{int a} -> int {return a + 1;};std::cout<<f(1)<<std::endl; //输出:2 //c++11中可以省略返回值定义:auto f = [](int a){return a + 1;}; /.原创 2021-12-06 21:55:15 · 528 阅读 · 0 评论 -
vs报错:‘wcstombs‘: This function or variable may be unsafe.
错误:'wcstombs': This function or variable may be unsafe. Consider using wcstombs_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. VINO c:\program files (x86)\intelswtools\openvino_2019.3.379\deployment_too...原创 2020-07-13 17:18:24 · 1220 阅读 · 0 评论 -
c++ -- #define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、defined
#define 定义一个预处理宏#undef 取消宏的定义#if 编译预处理中的条件命令,相当于C语法中的if语句#ifdef 判断某个宏是否被定义,若已定义,执行随后的语句#ifndef 与#ifdef相反,判断某个宏是否未被定义#elif 若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#elif之后的语句...原创 2020-12-06 21:51:27 · 659 阅读 · 0 评论 -
c++ -- enum 关键字
enum 关键字用于声明枚举。每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。枚举元素的默认基础类型为 int。默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增。枚举类型实质就是整型变量,只不过通过枚举类型将一类有关联的标识组合起来,增加程序的可读性和可维护性。(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号(,)隔开。(2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。(3) 第一个枚举原创 2020-12-06 17:11:47 · 287 阅读 · 0 评论 -
c++ -- &和 * 的解释
& 操作符:取变量的地址* 操作符:对指针做解引用操作int a = 12;int *p = &a; //让指针p指向存储变量a的单元,&a就表示是a单元的内存地址//&a: 0x73fdbc *p: 12 p: 0x73fdbc原创 2020-12-06 16:47:57 · 463 阅读 · 0 评论 -
c++ -- memcpy、strcpy、strcmp和memset函数的使用
目录1、memcpy2、strcpy,即string copy(字符串复制)的缩写3、memset1、memcpymemcpy指的是C和C++使用的内存拷贝函数。函数原型:void *memcpy(void *destin, void *source, unsigned n)函数所需头文件#include <string.h> //C语言#include <cstring> //C++函数的作用:从源内存地址的起始位置开始拷贝若干个字原创 2020-12-05 23:13:23 · 636 阅读 · 0 评论 -
“in”使用未定义的 class“std::basic_ifstream<char,std::char_traits<char>>”
问题: “in”使用未定义的 class“std::basic_ifstream<char,std::char_traits<char>>”解决:#include<fstream>原创 2020-07-16 11:06:29 · 4305 阅读 · 1 评论