C++
南方铁匠
在深度学习和体系结构熔炉的铁匠
展开
-
C语言调用malloc
在C中,如果。原创 2024-04-02 16:12:39 · 100 阅读 · 0 评论 -
C++ 前置声明和incomplete type
c++ 前置声明和incomplete type原创 2022-07-29 03:09:50 · 515 阅读 · 0 评论 -
【Clean C++】 读书笔记 第四章
Clean C++ code 第四章 读书笔记命名与注释源代码文件、命名空间、类、模板、函数、参数、变量和常量等,都应该具有意义的名字名称应该自注释不要为易懂的代码写注释函数函数应当只做一件事,而且尽可能的小目前c++编译器对函数优化已经做的足够好,可以写小函数,不会有开销的影响函数的参数应该尽可能的少,一个参数比较理想。避免在函数的参数使用bool类型的标志参数,因为这样调用时不可避免的需要使用true/false, 可以通过函数组合调用的方式,或者通过派生的方式控制不同原创 2021-11-27 23:23:29 · 585 阅读 · 0 评论 -
函数指针与汇编
typedef double (*PTRFUN)(int); PTRFUN pFun; double glFun(int a){ return a*2.4;} int main() { pFun = &glFun; (pFun)(2); (*pFun)(2); (glFun)(2); (&glFun)(2); } main 函数中的几行 汇编对应如下 mov QWORD PTR [rip+0x2原创 2021-11-04 15:14:53 · 595 阅读 · 0 评论 -
c++ 引用类型的类成员变量
Code:#include <iostream>using namespace std;class A {public: A(int& k):a(k){ // 必须要在初始化列表中进行初始化 cout << a <<endl; } int getVal() const { return a; }public: int &a;};int main(){ int原创 2021-10-31 12:12:20 · 1543 阅读 · 0 评论 -
python进阶
装饰器#!/usr/bin/pythondef func_wrapper(func): def inner(*args, **kwargs): print("wrapper_start"); func(*args, **kwargs); print("wrapper_end"); return inner@func_wrapperdef func(a,b): print ("a+b",a,b,a+b) return a+bfunc(1,2)原创 2021-05-12 23:29:03 · 123 阅读 · 0 评论 -
The Curiously Recurring Template Pattern (CRTP)
The Curiously Recurring Template Pattern (CRTP) is a C++ idiom whose name was coined byJames Coplien in 1995, in early C++ template code.The “C” in CRTP made it travel the years in the C++ community by being this: a Curiosity. We often find definitions .转载 2021-04-15 00:54:14 · 217 阅读 · 0 评论 -
读书笔记:C++ 进阶心法
默认构造函数,变量的值是随机值,字符串是空串类中有const类型的常量,不能构造函数中初始化,而需要在初始化列表中初始化 多重继承,如果多重继承的基类是同一个,那么就会存在基类被复制多份的问题,需要使用虚继承解决因为会存在使用父类指针指向子类对象的情况,在调用析构函数时,如果父类的析构函数不是虚函数,那么在delete父类指针时,不会按照多态的方式而去调用子类对象的析构函数。所以,父类的析构函数需要写成虚析构函数...原创 2020-09-12 16:42:42 · 485 阅读 · 0 评论 -
CPU Memory: 为什么需要使用互斥量mutex
多线程的变成需要使用旗语,同步代码段,互斥量或者是任何调用它们的编程语言。我们大多数基本上知道为什么我们需要它们:为了阻止多线程访问同一块内存区域。你是否停下来真正想过,它们究竟是干什么的?为什么你需要保护存储空间?这个听上去应该是CPU该干的活。大多数是的时候,互斥量也就是一个简单的实现,但是理解为什么需要它却没那么容易。这个答案在于CPU是如何组织存储的,以及它是如何优化你的代码的。...翻译 2020-07-11 21:05:28 · 766 阅读 · 0 评论 -
互斥量mutex是如何工作的
并发变成要求同步。同一时刻不能有超过一个线程处理数据,否则我们就会遇到数据竞争。最常见的做法就是将关键数据的访问权限放置到mutex中。mutex当然不是免费的。mutex可以严重的影响我们编写的代码的性能。当正确使用的时候我们很难注意到mutex引入的性能支出。但是错误的使用的时候,可能多线程的性能还比不过单线程。 互斥量mutex,最基本的形式就是内存中的一个整数。这个整数基于mutex的不同状态可以有不同的值。当我们讨论mutexes的时候,我们也会需要讨论锁机制。存储在存储器的中的整数并不有趣,.翻译 2020-07-08 00:47:49 · 633 阅读 · 0 评论 -
C/C++中static的用法全局变量与局部变量
1.什么是static? static是C/C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。1.1static的引入 我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题:如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义为全局的变量,但定义...转载 2020-05-01 10:55:38 · 508 阅读 · 0 评论 -
【转载】奇异递归模板模式( Curiously Recurring Template Pattern,CRTP)
1.CRTP介绍奇异递归模板模式(curiously recurring template pattern,CRTP)是C++模板编程时的一种惯用法(idiom):把派生类作为基类的模板参数。更一般地被称作F-bound polymorphism,是一类F 界量化,相关介绍可以参考 wiki 奇异递归模板模式。curiously recurring template pattern,CRTP的来...转载 2020-02-20 00:32:58 · 384 阅读 · 0 评论 -
【c++ primer 源代码】String 赏析
String.h#ifndef STRING_H#define STRING_H//#include "Version_test.h"#include <cstring>#include <algorithm>#include <cstddef>#include <iostream>#ifdef INITIALIZER_LIST...原创 2020-02-14 23:57:01 · 255 阅读 · 0 评论 -
C++ static、const和static const类型成员变量声明以及初始化
原文链接:https://blog.csdn.net/tobefxz/article/details/14109697下面的文章是我从网上找了好久,整理了好久的,对我有很大帮助,原址已经记不住了,算我自己原创的了哇!C++ static、const和static const 以及它们的初始化const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会...转载 2020-01-15 10:21:08 · 728 阅读 · 0 评论 -
X86-64寄存器和栈帧
X86-64寄存器和栈帧概要说到x86-64,总不免要说说AMD的牛逼,x86-64是x86系列中集大成者,继承了向后兼容的优良传统,最早由AMD公司提出,代号AMD64;正是由于能向后兼容,AMD公司打了一场漂亮翻身战。导致Intel不得不转而生产兼容AMD64的CPU。这是IT行业以弱胜强的经典战役。不过,大家为了名称延续性,更习惯称这种系统结构为x86-64。X86-64在向后兼...转载 2019-12-02 20:44:31 · 399 阅读 · 0 评论 -
C++ 使用new创建二维数组
#include <iostream>using namespace std;void main(){//用new创建一个二维数组,有两种方法,是等价的//一:int (*p)[10] = new int[5][10];//二:int **p = new int* [5];for(int i=0;i <5;i++)p[i] = new int[10];}...原创 2019-12-02 14:31:04 · 28563 阅读 · 0 评论 -
深入理解char * ,char ** ,char a[ ] ,char *a[]
1.数组的本质数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素。2.指针指针也是一种变量,只不过它的内存单元中保存的是一个标识其他位置的地址。由于地址也是整数,在32位平台下,指针默认为32位。3.指针的指向指向的直接意思就是指针变量所保存的其他的地址单元中所存放的数据类型。int *p; //p变量保存的地址所在内存单元中的数据...转载 2019-11-27 16:49:21 · 688 阅读 · 0 评论 -
C++ 模板类与头文件
今天将模板类函数分成了声明和定义两个文件:模板类的声明:#pragma once#ifndef FIND_ITEM#define FIND_TIEMtemplate <typename elemType>const elemType* find_item(const elemType* first, const elemType* last, const elem...原创 2019-08-04 20:12:03 · 3270 阅读 · 0 评论 -
枚举类型的转换
发现了一个奇怪的问题:如果函数的参数类型是枚举类型,在调用函数时,如果实参传入的是int类型,编译会报错。但是如果将函数类型定义为int类型,在内部是可以将int类型和枚举类型的变量做逻辑计算的。如果枚举类型的本质就是int类型,那么为什么不能直接类型转换呢?在CSDN上找到了如下内容:众所周知,C/C++语言可以使用#define和const创建符号常量,而使用enu...原创 2019-08-15 16:43:41 · 11420 阅读 · 0 评论 -
C++ Interview
1. new,delete,malloc, freemalloc free是库函数,new delete是操作符,与构造、析构绑定。new可以完成动态内存分配以及初始化。2. 构造、析构的顺序构造先构造基类,然后派生类;析构先派生类,然后基类3.多态不同对象接受相同消息可以产生不同的动作。虚函数:在基类中冠以关键字virtual 的成员函数。纯虚函数:只保留名字没有...原创 2018-10-11 09:36:30 · 376 阅读 · 0 评论 -
拷贝构造函数和赋值构造函数声明为私有的作用
转载:http://blog.csdn.net/rabbit729/article/details/4000500每个类只有一个赋值函数. 由于并非所有的对象都会使用拷贝构造函数和赋值函数,程序员可能对这两个函数有些轻视。请先记住以下的警告,在阅读正文时就会多心: 1.如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。倘若类中含有指转载 2016-11-27 11:55:02 · 3494 阅读 · 1 评论 -
Essential C++ 笔记
Essential C++ 目前看起来是C++的上手书了,记录自己的盲点。第二章2.2作用域及范围内置类型的对象,如果定义在file scope之内,必定被初始化为0。但如果他们被定义于local scope之内,那么除非程序员指定其初始值,否则不会被初始化。动态内存管理动态内存是分配在堆上的,与函数无关,因此除非程序员主动delete。即如果函数已经出栈了,但是没有释放的...原创 2019-08-03 14:15:36 · 127 阅读 · 0 评论 -
【转】C++ 函数后加override和final
转自:https://www.cnblogs.com/whlook/p/6501918.html1. override 重载 当你在父类中使用了虚函数时候,你可能需要在某个子类中对这个虚函数进行重写,以下方法都可以:class A{ virtual void foo();}class B :public A{ void foo(); //OK v...转载 2019-07-16 11:36:13 · 4016 阅读 · 0 评论 -
C++面试总结之常用基础知识
转载自:https://www.jianshu.com/p/e21d99638cf9C++程序员面试一般都是以下三板斧1.基础问答2.然后一顿虚函数、虚函数表、纯虚函数、抽象类、析构函数、拷贝构造函数3.操作数重载、STL、智能指针-------------------分割线-------------问题1,你知道虚函数吗?答案:实现多态所必须,父类类型的指针指向子类的实例,执行的时候会执行之类中...转载 2018-03-01 16:49:51 · 21596 阅读 · 3 评论 -
牛博记录
后端:http://blog.csdn.net/mikiah/article/details/7929669原创 2016-01-12 19:48:34 · 467 阅读 · 0 评论 -
C++局部变量、全局变量、静态变量(堆、栈、静态存储区)
转自:点击打开链接C++局部变量、全局变量、静态变量(堆、栈、静态存储区)1 static关键字1.1 隐藏eg://a.c文件中char a = 'A';void msg(){ printf("Hello\n");}//main.c文件中extern char a;转载 2017-07-23 19:22:41 · 1294 阅读 · 0 评论 -
C++ &引用
转自 http://www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html对于习惯使用C进行开发的朋友们,在看到c++中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C++中它却有着不同的用途,掌握C++的&符号,是提高代码执行效率和增强代码质量的一个很好的办法。在 c++学习提高篇(3)---隐式指针的文章中我转载 2016-11-27 15:29:56 · 288 阅读 · 0 评论 -
C++构造函数析构函数
转自 http://www.cnblogs.com/nchar/p/3911427.html构造函数 ,是一种特殊的方法 。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。(摘自百度百科 构造函数 )。一、最基本的构造函数转载 2016-11-25 23:05:08 · 335 阅读 · 0 评论 -
C++ 虚函数表解析
转自http://blog.csdn.net/haoel/article/details/1948051/C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指转载 2016-11-25 22:40:23 · 193 阅读 · 0 评论 -
const的用法,特别是用在函数前面与后面的区别!
在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针。可以改变this所指向的值,但不能改变 this所保存的地址。在 const成员函数中,this的类型是一个指向 const类类型对象的 const指针。既不能改变 this所指向的对象,也不能改变 this所保存的地址。 关键字:Const,Const函数,Const变量,函数后面的Const看到con转载 2016-11-15 23:39:54 · 232 阅读 · 1 评论 -
const在函数前与函数后的区别
一 const基础 如果const关键字不涉及到指针,我们很好理解,下面是涉及到指针的情况: int b = 500; const int* a = &b; [1] int const *a = &b; [2] in转载 2016-11-15 23:32:35 · 336 阅读 · 0 评论 -
inline,const与引用
1. const的好处就在于可以固定为常量;2.引用 &,引用与指针的操作的区别在于,指针传入函数之后,指针还会创建一个本地的拷贝,而引用直接是变量的别名,不会被拷贝;3. inline,内联函数,是建议编译器进行展开,而不一定就一定被展开了。内联与普通函数的区别在于,内联函数是直接被就地展开了,类似于复制粘贴。而普通的函数会存在函数调用,压栈出栈那一系列的操作。4. static inl...原创 2018-06-04 17:45:43 · 965 阅读 · 0 评论 -
深入理解C++的动态绑定和静态绑定
转载自 https://blog.csdn.net/chgaowei/article/details/6427731为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。需要理解四个名词:1、对象的静态类型:对象在声明时采用的类型。是在编译期确定的。2、对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是...转载 2018-06-01 09:43:19 · 1071 阅读 · 0 评论 -
【转】c++11 类默认函数的控制:"=default" 和 "=delete"函数
c++11 类默认函数的控制:"=default" 和 "=delete"函数转自:https://www.cnblogs.com/lsgxeva/p/7787438.html#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <string>#include <vector&...转载 2019-07-10 14:47:46 · 135 阅读 · 3 评论 -
【转】C++ const的用法,以及在函数前面,后面的区别
转自:https://www.cnblogs.com/azbane/p/7266747.htmlconst的用法,特别是用在函数后面在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针。可以改变this所指向的值,但不能改变 this所保存的地址。在 const成员函数中,this的类型是一个指向 const类类型对象的 const指针。既不能改变 thi...转载 2019-07-13 10:04:54 · 356 阅读 · 0 评论 -
四种不同对象的生存方式(栈、堆、全局、局部静态)
转自:https://www.cnblogs.com/yyxt/p/4912271.html [结果分析,引申出四种对象]: 生存方式 执行时机 消亡时机 全局(静态)对象 全局静态存储区global 比程序进入点更早,构造函数先被执行; ...转载 2019-06-19 14:50:44 · 246 阅读 · 0 评论 -
c++ 菜鸟教程
菜鸟教程中的c++1. C++类访问修饰符:public,private(只有类和友元函数可以访问),protected(保护成员变量与私有成员十分相似,不同的是保护成员可以在派生类中访问);在类里不写访问修饰符,默认是private,但是结构体的默认是public;2. 虚继承(需要理解原理)是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝。这将存在两个问题...原创 2018-06-18 18:26:25 · 10071 阅读 · 1 评论 -
Accelerated C++
最近读了Accelerated C++,做一下整理笔记第0章 入门1. 如果要使用头文件中的人和名字,需要提前#include;2. return 0表示成功;第三章 使用批量数据1. 对于类的对象来说,类自己会说明如果没有指定初始化的值会如何初始化,如string会初始化为空字符串;然而其他的没有显式初始化的内置类型的局部变量是不明确的,可能是变量创建时所占内存刚好含有的值;2. 输出doub...原创 2018-06-18 18:10:50 · 2526 阅读 · 0 评论 -
返回函数指针类型的函数
在对f函数进行声明的int (*f(int a))(int,int,int)中,实际上对f真正起作用的是,*f(int a),即声明f函数,形参为a,返回一个指针。而返回什么指针呢?int ()(int,int,int)即指向这个类型的函数的指针,在return中,又明确说了,就是return到get_big上,这就是返回函数指针函数的函数的用处。原创 2016-11-15 22:31:17 · 517 阅读 · 0 评论