c+

ASP.Net中的async+await异步编程的实现

在.NET Framework4.5框架、C#5.0语法中,通过async和await两个关键字,引入了一种新的基于任务的异步编程模型(TAP)。在这种方式下,可以通过类似同步方式编写异步代码,极大简化了异步编程模型。 用法: public async Task<int> GetDotNetCountAsync() { // Suspends GetDotNetCount() to a... »

c++ 有趣的动态转换

缘起 最近,在项目代码中看到一个非常神奇的类型转换—— 类型A 的指针居然能动态转换成另外一个完全没有任何关系的类指针。这…… 完全颠覆了我的认知。 为了进一步了解这个神奇的操作,我特意模拟了项目代码中的情形,一起来看看吧。 代码简介 BaseA 和 BaseB 是两个基类,NewA 继承自 BaseA,NewB 继承自 BaseB。TestB() 会在堆上 new 一个 NewB 的对象,但是会... »

简单讲解c++ vector

在c++中,vector是一个十分有用的容器。vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector 表示构造一个无名且含n个0的vector 对象。C++ 中Vector常用基本操作 »

详解c++ 静态成员变量

类定义时的静态成员只是声明,静态成员的定义和初始化要在类之外完成 C++的static关键字可修饰类成员变量/方法,表示变量/方法不从属于特定对象,而是属于类的。仔细琢磨静态成员变量,会发现其与C++的方式既相容也矛盾,具有特殊性。 先说相容的一面。·C/C++·有声明和定义的说法:声明给出签名,定义给出具体实现。对类型而言,声明不一定能知道其对象占用空间大小,但根据定义肯定能确定内存占用。说静态... »

c++ 入门——浅析构造函数和析构函数

前文回顾 本文档环境基于Vscode + GCC + CodeRunner 关于C++的环境搭建请参考下面链接: https://www.jb51.net/article/186542.htm 由于本人具有C#开发经验,部分相同的知识就不再赘述了。只列一下需要记录的知识。 HelloWorld cout 代表输出<< cin 代表输入 >> endl;代表换行,清空缓冲区。... »

区分c++中的声明与定义

C++编码过程中,我们经常谈及“定义”和“声明”,二者是编程过程中的基本概念。我们需要使用一个变量、类型(类、结构体、枚举、共用体)或者函数时,我们需要提前定义和声明。定义和声明的过程,就像我们向图书馆借阅书籍一般,需要先完成书籍的印刷,即创造出书籍,这是一个定义的过程,有了书籍,我们需要到图书馆完成借阅的登记手续,这是申明的过程。完成了申明,我们有了使用书籍的权限,就可以尽情的畅游在知识的海洋。... »

举例分析private的作用(c/c++学习)

c++中private的用处 我知道我们可以用 public 中的值,把private中的数据给提出来,但是还是搞不懂private该怎么用,或者说在一个具体程序中,private有什么用。 class fun{ public: void setname(string x) { name =x; } string getname() { return name; } private: string... »

简述c++ 发展史

到了2017年,C++迎来了C++17标准。C++仍在不断的发展,下一个版本将是C++20,C++历史上的标准变更如下。 »

c++访问私有private成员变量的常用方法

类的对象不能直接访问类声明的私有成员变量,否则破坏了信息隐藏的目的。 在C++中,为了防止某些数据成员或成员函数从外部被直接访问,可以将它们声明为private,这样编译器会阻止任何来自外部非友元的直接访问。 私有成员变量的常用访问方法如下: (1)通过公共函数为私有成员赋值 #include <iostream> using namespace std; class Test { p... »

浅谈c++如何实现并发中的Barrier

c++的基本语法和有关多线程的语法。在研究Barrier的实现中,我查阅了蛮多的资料的。所以如果按照这个类比,实现一个barrier至少需要以下的几个变量: 需要同时在barrier等待的线程的个数。当前到达barrier的线程的个数。 »

实例代码讲解c++ 继承特性

——派生类需要自己的构造函数。         派生类中可以根据需要添加额外的数据成员和成员函数,甚至可以给予继承的原成员函数新的定义。    基类指针或引用可指向派生对象,反过来则只能使用强制类型转换。    派生类对象可使用基类的非私有成员。    可使用派生对象初始化基类对象或赋值。    一般不允许将基类对象赋给派生类对... »

详细分析c++ const 指针与指向const的指针

  最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义:   const指针是指针变量的值一经初始化,就不可以改变指向,初始化是必要的。其定义形式如下: type *const 指针名称;   声明指针时,可以在类型前或后使用关键字const,也可在两个位置都使用。例如,下面都是合法的声明,但是含义大不同... »

详解c++中的类型识别

1、类型识别的相关概念 (1)类型识别的作用   类型识别是面向对象中引入的一个新概念,主要用来判断赋值兼容性原则中的类型问题,即此时的数据类型到底是基类类型还是派生类类型?   当基类指针指向子类对象 或者基类引用成为子类对象的别名 时,就需要使用类型识别; Base *p = new Derived(); Base &r = *p 对于上面的语句,我们可以这样认识,指针p是Base类型... »

浅谈c++ 预处理器

预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。 所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。 我们已经看到,之前所有的实例中都有 #include 指令。这个宏用于把头文件包含到源文件中。 C++ 还支持很多预处理指令,比如 #include、#define、#if、#else、#line... »

使用c++调用windows打印api进行打印的示例代码

前言 在近期开发的收银台项目中,需要使用打印机进行小票打印,打印流程的时序图如下所示: 在客户的使用过程中,遇到一个问题,如果机器安装了打印机驱动,那么调用厂商提供的 sdk 进行打印的话,会导致出现小票只打印一半的情况,对此,需要绕过厂商 sdk 使用系统的打印才能够解决这一问题。 在 web 端打印中,需要调用浏览器打印 api 进行网页打印。这意味着,之前后端编写的esc/pos无法复用到,... »

一文读懂c++之static关键字

一、静态变量 与C语言一样,可以使用static说明自动变量。根据定义的位置不同,分为静态全局变量和静态局部变量。 全局变量是指在所有花括号之外声明的变量,其作用域范围是全局可见的,即在整个项目文件内都有效。使用static修饰的全局变量是静态全局变量,其作用域有所限制,仅在定义该变量的源文件内有效,项目中的其他源文件中不能使用它。 块内定义的变量是局部变量,从定义之处开始到本块结束处为止是局部变... »

浅谈c++中“::”和“:” 冒号的意思

(1) “::” 1)类作用域操作符。“::”指明了成员函数所属的类。    如:M::f(s)就表示f(s)是类M的成员函数。 2)表示域操作符。    如:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出 f 的定义,那么在类外定义 f 时, 就要写成void A::f(),表示这个f()函数是类A的成员函数。 3)命名空... »

c++野指针的原理以及避免方法

1.定义 指向非法的内存地址指针叫作野指针(Wild Pointer),也叫悬挂指针(Dangling Pointer),意为无法正常使用的指针。 2.出现野指针的常见情形 2.1使用未初始化的指针 出现野指针最典型的情形就是在定义指针变量之后没有对它进行初始化,如下面的程序。 #include <iostream> using namespace std; int main() { ... »

一文读懂c++11 Lambda表达式

1.简介 1.1定义 C++11新增了很多特性,Lambda表达式(Lambda expression)就是其中之一,很多语言都提供了 Lambda 表达式,如 Python,Java ,C#等。本质上, Lambda 表达式是一个可调用的代码单元[1]^{[1]}[1]。实际上是一个闭包(closure),类似于一个匿名函数,拥有捕获所在作用域中变量的能力,能够将函数做为对象一样使用,通常用来实... »

c++禁止函数的传值调用的方法

代码编译运行环境:VS2017+Debug+Win32 按照参数形式的不同,C++应该有三种函数调用方式:传值调用、引用调用和指针调用。对于基本数据类型的变量作为实参进行参数传递时,采用传值调用与引用调用和指针调用的效率相差不大。但是,对于类类型来说,传值调用和引用调用之间的区别很大,类对象的尺寸越大,这种差别越大。 传值调用与后面两者的区别在于传值调用在进入函数体之前,会在栈上建立一个实参的副本... »

c++字符串分割的方法

C++ 中经常需要对字符串按照分隔符进行分割以获得子串序列,子串的顺序与其在原字符串中出现的顺序一致。一般有两种需求场景:  (1)给定一个分隔符(单个字符或子串)分割字符串;  (2)给定一个或多个分隔符(单个字符),分割字符串。 当给定的分隔符不在原字符串中,则原字符串不被分割,返回单个元素为原字符串的 vector。 注意,本文实现时,如果被分割后的子串为空串,则不计入最... »

解决vscode下调试c/c++程序一闪而过的问题(Windows)

起因 开始学习c语言了,一开始想的就是直接装个VS就完了,但是一搜都是说vs臃肿啥啥不好,不如用vscode来整,多轻量~于是就网上搜了许多教程开整了,期间也遇到了一些常见的坑,这些集中写个文,希望可以帮助到大家。配置文件也是来自其他文章的,我也进行了部分修改,后面会标出。 解决方法 我们知道使用vscode对c/c++进行调试的本质是这样的——1.GCC编译代码,2.vscode运行编译出的程序... »

c++如何实现Base64算法

Base64用途 1.用于对SOHO级路由器(网关设备)管理员帐户密码的加密 2.流媒体网站对于播放的流媒体文件的路径的加密 3.迅雷等下载软件对下载链接地址的加密 Base64算法 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 Base64类 函数: unsigned int CreateMatchin... »

深入了解c++数组与指针

1.数组 数组大小(元素个数)一般在编译时决定,也有少部分编译器可以运行时动态决定数组大小,比如icpc(Intel C++编译器)。 1.1数组名的意义 数组名的本质是一个文字常量,代表数组第一个元素的地址和数组的首地址。数组名本身不是一个变量,不可以寻址,且不允许为数组名赋值。假设定义数组: int A[10]; 那么再定义一个引用: int* &r=A; 这是错误的写法,因为变量A是... »

c++如何控制对象的创建方式(禁止创建栈对象or堆对象)和创建的数量

既然如此,我称位于它们之中的对象分别为堆对象,栈对象以及静态对象。通常情况下,对象创建在堆上还是在栈上,创建多少个,这都是没有限制的。所以,如果想控制CGameWorld的实例化对象只有一个,最简单的方法就是将构造函数声明为private,同时提供一个static对象。 »

Page 1 of 21123»