初始化列表

让自己习惯C++

烂漫一生 提交于 2020-01-29 11:12:00
条款一:视C++为一个语言联邦 今天的C++是个多重泛型编程语言(multiparadigm programming language),一个同时支持过程(procedural)、面向对象(object-oriented),函数形式(functional),泛型形式(generic),元编程形式(metaprogramming)的语言。 C++主要的次语言: C。 Object-Oriented C++。class、封装、继承、多态等。 Template C++。C++泛型编程部分。 STL。容器、迭代器、算法以及函数对象 条款二:尽量以 const、enum、inline 替换 #define #define 是在预处理阶段处理的,记号从未被编译器看见,所使用的名称也可能从未进入记号表(symbol table)。 解决方法是以一个常量替换宏。 有一个特殊情况是 class 专属常量。将常量的作用域限制在类内,必须让它成为 class 的 一个成员;为了确保此常量至多只有一份实体,必须让它成为 static 成员。 12345678910 class GamePlayer {private: static const int NumTurns = 5; // 常量声明式 int scores[NumTurns]; // 使用该常量}; 通常 C++

const int & 和 int 的区别

偶尔善良 提交于 2020-01-28 13:58:36
当形参是const时,必须要注意关于顶层const的讨论。如前所述,顶层const的作用于对象本身: const int ci=42; //不能改变ci,const是顶层的 int i=ci; //正确:当拷贝ci时,忽略了它的顶层const int *const p=&i; //const是顶层的,不能给p赋值 *p=0; //正确:通过p改变对象的内容是允许的,现在i变成了0 和其他初始化过程一样,当用实参初始化形参时会忽略掉顶层const。换句话说,形参的顶层const被忽略掉了。当形参有顶层const时,传给它的常量对象或者非常量对象都是可以的: void fcn(const int i){ / fcn能够读取i,但是不能向i写值 /} 调用fcn函数时,既可以传入const int也可以传入int。忽略掉形参的顶层const可以产生意想不到的结果: void fcn(const int i) {/ fcn能够读取i,但是不能向i写值 /} void fcn(int i) {/ … /}//错误:重复定义了fdn(int) 在C++语言中,允许我们定义若干具有相同名字的函数,不过前提是不同函数的形参列表应该有明显的区别。因为顶层const被忽略了,所以在上面的代码中传入两个fcn函数的参数可以完全一样。因此第二个fcn是错误的,尽管形式上由差异

C++ primer 笔记(一)

。_饼干妹妹 提交于 2020-01-28 08:22:47
第1章 >> << 输入输出操作符返回 输出流std::cin, std::cout本身 endl输出换行,刷新与设备关联的buffer augument 实参 paremeter 形参 buit-in type 内置类型 manipulator 操纵符 第2章 C++是静态类型语言,编译时执行类型检查 wchar_t =L'a' 16位 float 6位有效数字 double 至少10位有效数字 long double 至少10位有效数字 赋值:对于unsigned越界赋值,结果等于该值对unsigned可能取值个数求模 例如:unsigned char c=336; //实际c=336%256=80 unsigned char c=-1; //实际c=-1%256=255 对于signed越界赋值,由编译器决定实际值 初始化不是赋值,初始化指创建变量并赋值,赋值是擦出当前值赋新值 内置类型初始化:在函数体外定义的变量初始化为0,函数体内定义的不自动初始化。 定义:分配存储空间,还可以指定初值 声明:向程序表明变量的类型,名字 extern声明:当有初始化式时则为定义 非const变量默认为extern,要使const变量能在其他文件中访问,则需显式指定为extern。const默认为定义它的文件的局部变量。 引用必须在定义时初始化,引用一经初始化,就始终指向同一个特定对象。

c++中冒号(:)和双冒号(::)的用法

我的未来我决定 提交于 2020-01-26 17:32:54
c++中冒号(:)和双冒号(::)的用法 1.冒号(:)用法 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 (1)表示机构内位域的定义(即该变量占几个bit空间) typedef struct _XXX{ unsigned char a:4; unsigned char c; } ; XXX (2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。 struct _XXX{ _XXX() : y(0xc0) {} }; (3) public:和private:后面的冒号,表示后面定义的所有成员都是公有或私有的,直到下一个"public:”或"private:”出现为止。"private:"为默认处理。 (4)类名冒号后面的是用来定义类的继承。 class 派生类名 : 继承方式 基类名 { 派生类的成员 }; 继承方式:public、private和protected,默认处理是public。 2.双冒号(::)用法 (1)表示“域操作符” 例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时, 就要写成void A::f(),表示这个f(

C++基础:变量和基本类型

前提是你 提交于 2020-01-26 05:09:51
基本内置类型 一、基本内置类型 C++定义了一套包括算术类型(arithmetic type) 和空类型(void) 在内的基本数据类型。其中算术类型包含了字符、整型数、布尔值和浮点数。空类型不对应具体的值,仅用于一些特殊的场合,例如最常见的是,当函数不返回任何值时使用空类型作为返回类型。 二、算术类型 算术类型分为两类:整型(integral type,包括字符和布尔类型在内)和浮点型。 带符号类型和无符号类型 除去布尔型和扩展的字符型之外,其他整型可以划分为带符号的(signed) 和无符号的(unsigned) 两种。带符号类型可以表示正数、负数或0,无符号类型则仅能表示大于等于0的值。 类型int、short、 long 和long long 都是带符号的,通过在这些类型名前添加unsigned就可以得到无符号类型,例如unsigned long。 类型unsigned int 可以缩写为unsigned。 与其他整型不同,字符型被分为了三种: char、signed char和unsigned char。特别需要注意的是:类型char和类型signed char并不一样。类型char实际上会表现为上述两种形式中的一种,具体是哪种由编译器决定。 建议:如何选择类型 和C语言一样,C++的设计准则之一也是尽可能地接近硬件。C++的算术类型必须满足各种硬件特质

C++ Primer 学习笔记 第三章字符串、向量和数组

回眸只為那壹抹淺笑 提交于 2020-01-25 04:50:15
using声明后就可以不使用作用域操作符了,如: std :: cin ; 等价于 : using std :: cin ; //声明后再用cin时就不用加前缀了 cin ; 每个using声明引入命名空间中的一个成员,但也可以指定变量所在的命名空间: using namespace std ; 头文件不应包含using声明,因为头文件内容会拷贝到所有引用了它的文件中,那么每个使用了该头文件的文件都会有这个声明,有时会产生名字冲突。 标准库类型string表示可变长的字符序列,使用前要先包含string头文件,string定义在命名空间std中。 初始化string方式: string s1 ; //默认初始化,s1是空字符串 string s2 = s1 ; //s2是s1的副本 string s3 = "hiya" ; //s3是该字面值去掉最后的'\0'的副本 string s4 ( 10 , 'c' ) ; //s4是cccccccccc string s5 ( s1 ) ; //与s2方式初始化方式等价 string s6 ( "hiya" ) ; //与s3初始化方式等价 拷贝初始化:用=初始化 直接初始化:不用=初始化 string s1 = "hiya" ; //拷贝初始化 string s2 ( "hiya" ) ; //直接初始化 string s3 ( 10

const形参和实参

人走茶凉 提交于 2020-01-23 13:21:55
当形参是const时,必须要注意关于顶层const的讨论。如前所述,顶层const的作用于对象本身: const int ci=42; //不能改变ci,const是顶层的 int i=ci; //正确:当拷贝ci时,忽略了它的顶层const int *const p=&i; //const是顶层的,不能给p赋值 *p=0; //正确:通过p改变对象的内容是允许的,现在i变成了0 和其他初始化过程一样,当用实参初始化形参时会忽略掉顶层const 。换句话说,形参的顶层const被忽略掉了。当 形参有顶层const时,传给它的常量对象或者非常量对象都是可以的 : void fcn(const int i){ /*fcn能够读取i,但是不能向i写值*/} 调用fcn函数时,既可以传入const int也可以传入int。 忽略掉形参的顶层const可以产生意想不到的结果 : void fcn(const int i) {/*fcn能够读取i,但是不能向i写值*/} void fcn(int i) {/*....*/}//错误:重复定义了fdn(int) 在C++语言中,允许我们定义若干具有相同名字的函数,不过前提是不同函数的形参列表应该有明显的区别。因为顶层const被忽略了,所以在上面的代码中传入两个fcn函数的参数可以完全一样。因此第二个fcn是错误的,尽管形式上由差异

JAVA编程思想——分析阅读

点点圈 提交于 2020-01-21 12:37:51
需要源码、JDK1.6 、编码风格参考阿里java规约 7/12开始 有点意识到自己喜欢理论大而泛的模糊知识的学习,而不喜欢实践和细节的打磨,是因为粗心浮躁导致的么? cron表达式使用 设计能力、领域建模能力 其他: 海明威的硬币:老人与海 工具准备: java编程思想电子版 别人整理的思维导图 前言 适用范围:Java SE5/6 版本。 Java的设计目标是:为程序员减少复杂性,缩短代码的开发时间,跨平台复用。 学习方法:一模式或一节点就进入一练习,思维与实践并行,现学现卖。 每当我认为我已经理解了并发编程时,又会有新的奇山峻岭等待这我去征服。——作者都花了好几个月写并发这一篇章并发出这样的感慨,我们又有什么理由妄自菲薄呢。 绪论 学习语言时:需要在头脑中创建一个模型,以加强对这种语言的深入理解;如果遇到了疑问,就将它反馈到头脑的模型中并推断出答案。 疑问:模型是什么意思?java略图?宏语言是什么? A:模型指的是思维导图。有个一整个的概念。 按照人类学习语言的方式。? 一、对象导论 1 知识 人们所能够解决的问题的复杂性直接取决于抽象的类型和质量。类型即指所抽象的是什么,也可以说用的是什么类型的语言。Java,C ,汇编,Python等。其中想C或者汇编要基于计算机的结构来求解问题,面向过程;而Java 等面向对象的语言是基于问题来求解,面向对象。 面向对象的5个基本特性

c++构造函数的初始化列表(翁恺c++公开课[13])

一世执手 提交于 2020-01-19 00:14:08
初始化列表形式: class Point { private: const float x,y; Point(float xa = 0.0, flato ya = 0.0):y(ya),x(xa) {} }; y(ya),x(xa)就是初始化列表的形式,而且是在构造函数被调用之前运行; 从此以后要用这种方式写构造函数的初始化。 来源: https://www.cnblogs.com/go-ahead-wsg/p/12210663.html

RocketMQ客户端加载流程

荒凉一梦 提交于 2020-01-18 00:43:43
 这节介绍RocketMQ客户端的启动流程,即Consumer和Producer的启动流程。 1. 客户端demo  首先先看下客户端的demo Producer: public class SyncProducer { public static void main (String[] args) throws Exception { // 实例化消息生产者Producer DefaultMQProducer producer = new DefaultMQProducer ("GroupTest"); // 设置NameServer的地址 producer.setNamesrvAddr ("localhost:9876"); // 启动Producer实例 producer.start (); for (int i = 0; i < 100; i++) { // 创建消息,并指定Topic,Tag和消息体 Message msg = new Message ("TopicTest" /* Topic */, "TagA" /* Tag */, ("Hello RocketMQ " + i).getBytes (RemotingHelper.DEFAULT_CHARSET) /* Message body */ ); // 发送消息到一个Broker SendResult