初始化列表

例解GNU C之指定初始化项目

北慕城南 提交于 2019-12-15 19:51:07
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言:计算机语言是编译器和程序员交流的依据和规范,GNU C是GCC特有的功能,在Linux内核中被广泛应用。 帮助文档: http://gcc.gnu.org/onlinedocs/gcc-4.6.2/gcc/C-Extensions.html#C-Extensions 指定初始化项目(Designated Initializers):指的是可以对数组中的某些元素或结构体变量中的某些成员以任意的顺序进行选择性的初始化。 1、在数组中的应用 在数组的初始化列表中使用“[index]= value”这样的形式即可实现对指定(通过index指定)的某个元素进行初始化。 举例,如清单1: [cpp] view plain copy #include <stdio.h> int main( void ) { int i; int arr[6] = { [3] = 29, 18, [0] = 12, 33}; //等价于int arr[6] = { [3] = 29, [4] = 18, [0] = 12, [1] = 33}; //也就是等价于int arr[6] = {12, 33, 0, 29, 18, 0}; for (i = 0; i < 6; i++) printf( "arr[%d]: %d\n" , i,

C++之带有默认参数值的构造函数

落花浮王杯 提交于 2019-12-14 00:15:38
初始化列表可以让类的属性带上默认值。 初始化列表只能用于构造函数 ,即类在实例化时会调用自己的构造函数, 初始化列表先于构造函数执 行 ,这样对象在创建的时候就有了带默认值的属性。 格式如下图红色部分:赋值必须在()内。 初始化列表与在构造函数的{ }里赋值是不同的, class Base { public: Base(const string& s) : s_(s) {} /* Base(const string& s) { s_ = s; } */ private: string s_; }; 编译器大概会把以上代码扩张成 Base(const string& s) { s_.string::string(s); } /* Base(const string& s) { s_.string::string(); string tmp = string(s); // create temporary object s_.string::operator=(tmp); tmp.string::~string(); } */ 所以 被注视掉的写法,多了一次构造函数和析构函数的开销。因此初始化列表的优点:节省开销,更高效。 static类成员永远也不会在类的构造函数初始化。静态成员在程序运行的过程中只被初始化一次,所以每当类的对象创建时都去“初始化”它们没有任何意义。至少这会影响效率

聚宽源码34

一个人想着一个人 提交于 2019-12-11 14:02:11
原文策略源码如下: #多因子选股策略 from kuanke.wizard import * from jqdata import * import numpy as np import pandas as pd import talib import datetime 初始化函数,设定要操作的股票、基准等等 def initialize(context): # 设定基准 set_benchmark(‘000300.XSHG’) # 设定滑点 set_slippage(FixedSlippage(0.02)) # True为开启动态复权模式,使用真实价格交易 set_option(‘use_real_price’, True) # 设定成交量比例 set_option(‘order_volume_ratio’, 1) # 股票类交易手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱 set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type=‘stock’) # 个股最大持仓比重 g.security_max_proportion = 1 #

聚宽源码35

十年热恋 提交于 2019-12-11 12:40:25
原文策略源码如下: #多因子选股改进型 from kuanke.wizard import * from jqdata import * import numpy as np import pandas as pd import talib import datetime 初始化函数,设定要操作的股票、基准等等 def initialize(context): # 设定基准 set_benchmark(‘000300.XSHG’) # 设定滑点 set_slippage(FixedSlippage(0.02)) # True为开启动态复权模式,使用真实价格交易 set_option(‘use_real_price’, True) # 设定成交量比例 set_option(‘order_volume_ratio’, 1) # 股票类交易手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱 set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type=‘stock’) # 个股最大持仓比重 g.security_max_proportion = 1 #

聚宽源码33

和自甴很熟 提交于 2019-12-11 12:02:56
原文策略源码如下: #潜力股选股策略 from kuanke.wizard import * from jqdata import * import numpy as np import pandas as pd import talib import datetime 初始化函数,设定要操作的股票、基准等等 def initialize(context): # 设定基准 set_benchmark(‘000300.XSHG’) # 设定滑点 set_slippage(FixedSlippage(0.02)) # True为开启动态复权模式,使用真实价格交易 set_option(‘use_real_price’, True) # 设定成交量比例 set_option(‘order_volume_ratio’, 1) # 股票类交易手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱 set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type=‘stock’) # 个股最大持仓比重 g.security_max_proportion = 1 #

C++中初始化列表的使用

Deadly 提交于 2019-12-09 12:13:12
1,初始化列表是在 C++ 中才引入的; 2,以“类中是否可以定义 const 成员?”这个问题来引入初始化列表: 1,const 这个关键字可以定义真正意义上的常量,也可以在某些情况下定义只读变量; 3,小实验: 1,下面的类定义是否合法?如果合法,ci 的值是什么,存储在哪里? 1 #include <stdio.h> 2 3 class Test 4 { 5 private: 6 const int ci; // const 作用于 C++ 中的成员变量后得到的是只读成员变量,只读成员变量是不可以出现在成员符号左边的;所以会出现第 10 行的错误信息; 7 public: 8 /* 9 Test() // 在这里编译器显示:ci 是一个 const 成员,没有进行初始化;因此如果要初始化 ci 成员变量,必须要在这一行进行,这个时候就让初始化列表出厂了; 10 { 11 ci = 10; // 在这里编译器显示:ci 在这个类中是一个只读的成员变量; 12 } 13 */ 14 15 /* 由上面的语句改换如下 */ 16 Test() : ci(10) // ci 在初始化之后可以改变,因为 ci 在这里只是一个只读的成员变量,仅仅是不能出现在赋值符号左边而已;我们依旧可以通过指针的方式来修改 ci 里面的值; 17 { 18 // ci = 10; 19 } 20 21

C++中的 .h 和 .cpp 区别详解

橙三吉。 提交于 2019-12-07 19:08:47
在C++编程过程中,随着项目的越来越大,代码也会越来越多,并且难以管理和分析。于是,在C++中就要分出了头(.h)文件和实现(.cpp)文件,并且也有了Package的概念。 对于以C起步,C#作为“母语”的我刚开始跟着 导师 学习C++对这方面还是感到很模糊。虽然我可以以C的知识面对C++的语法规范,用C#的思想领悟C++中类的使用。但是C#中定义和实现是都在一个文件中(其实都是在类里面),而使用C的时候也只是编程的刚刚起步,所写的程序也只要一个文件就够了。因此对于C++的Package理解以及.h文件和.cpp文件的总是心存纠结。 幸好有详细的 PPT 让我了解,一次对于Package的认识就明白多了。简单讲,一个Package就是由同名的.h和.cpp文件组成。当然可以少其中任意一个文件:只有.h文件的Package可以是接口或模板(template)的定义;只有.cpp文件的Package可以是一个程序的入口。 当然更具体详细的讲解,欢迎下载导师的教学 PPT-Package 来了解更多。 不过我在这里想讲的还是关于.h文件和.cpp文件 知道Package只是相对比较宏观的理解:我们在项目中以Package为编辑对象来扩展和修正我们的程序。编写代码时具体到应该把什么放到.h文件,又该什么放在.cpp文件中,我又迷惑了。 虽然Google给了我很多的链接

C++面向对象程序设计学习笔记(5)

…衆ロ難τιáo~ 提交于 2019-12-07 09:14:27
派生类与继承 概念 继承允许编程者在已有类的基础上创建新的类,可以从一个或者多个已有类中继承函数和数据,并重新定义或者添加新的函数和数据,已有类称为基类或父类,新类称为派生类和子类。 声明 声明一个派生类的一般格式为: class 派生类名 : [继承方式] 基类名 { 派生类新增的数据成员和成员函数 }; 继承方式种类有 private, public ,protected ,分别为私有、公有和保护继承 若不显式地给出关键字,则默认为私有 构成 构造一个派生类包括三部分公作: 1)派生类从基类接受成员 派生类将基类除构造函数和析构函数以外的全部成员全部接收 2)调整从基类接收来的成员 调整包括两个方面 改变基类成员在派生类中的访问属性(通过继承方式实现) 对基类成员重定义(派生类的同名成员会覆盖基类中的同名成员) 3)在派生类中添加新的成员 基类成员在派生类中的访问属性 基类中的成员 在公有派生类中的访问属性 在私有派生类中的访问属性 在保护派生类中的访问属性 私有成员 不可直接访问 不可直接访问 不可直接访问 公有成员 公有 私有 保护 保护成员 保护 私有 保护 派生类对基类成员的访问规则 派生类对基类成员的访问形式主要有两种: (1)内部访问 由派生类中新增的成员函数对基类继承来的成员的访问 (2)对象访问 在派生类外部,通过派生类对象对从基类继承来的成员的访问

Effective C++学习笔记一

ε祈祈猫儿з 提交于 2019-12-07 08:18:00
条款 01 : 视C++ 为一个语言联邦 Ø C Ø Object-Oriented C++ Ø Template C++//泛型编程部分( generic programming ) Ø STL C++ 高效编程守则视情况而变化,取决与你使用 C++ 的 哪一部分。 条款 02 : 尽量以 const, enum , inline替换#define Ø 对于单纯常量,最好以 const 对象或者 enums 替换#defines 。 Ø 对于形似函数的宏,最好改用 inline 函数替换 #defines 。 条款 03 : 尽可能使用 const Ø 声明为 const 可帮助编译器侦测出错误用法。 Ø 编译器强制实施 bitwise constness, 但你编写程序时应该使用 “ 概念 上的常量性 ” 。 Ø 当const 和 non-const 成员函数有 着实质等价的实现时,令 non-const 版本调用 const 版本 可避免代码重复。 条款 04 : 确定对象被使用前已先被初始化 Ø C++ 成员初始化次序是固定的 ,class 的成员变量总是以其声明次序被初始化。但是 它们可以在成员初值列中以不同的次序出现,没有影响。 Ø 构造函数中注意分清初始化操作和赋值操作。初始化是在成员初始化列表里面,而赋值是在构造函数本体里面进行的。 Ø 构造函数最好使用成员初值列

C/C++——构造函数和析构函数

こ雲淡風輕ζ 提交于 2019-12-07 07:36:47
本文对类的构造函数和析构函数进行总结,主要包括了构造函数的初始化、重载、使用参数和默认参数,拷贝构造函数和析构函数,希望能帮助读者在程序开发中更好的理解类,属 于 C/C++ 基础。 1、 构造函数 构造函数与类名相同,它是一种特殊的成员函数,没有返回值类型和返回值。在对象建立时自动调用,不需要也不能由用户调用。构造函数主要为对象开辟内存空间,完成对象数据成员的初始化。 (1) 、构造函数的初始化 构造函数的主要功能是给对象初始化,初始化有两种方式,一种是用参数初始化列表,这种方式简练;另一种是在构造函数的函数体内对数据成员进行赋值实现初始化,这种方式方便直观。 参数初始化列表初始化 参数初始化列表初始化的形式是在函数的首部的末尾加冒号,然后列出用逗号分隔的数据成员列表初始化表。如: T ::T( int a , int b ) :hour( a ),minute( b ) {} 表示用a初始化hour,用b初始化minute,即 hour=a; minute=b; 虽然后面的花括号是空的,但已经给对象进行了初始化。 注意: ① 对于 const 或引用类型的成员必须在构造函数初始化列表中进行初始化,这是初始化它们的唯一机会, 原因分析在赋值语句初始化段。 ② 不能用参数初始化列表对静态数据成员初始化,而且只能在类外初始化 ,可以像普通数据成员那样通过对象访问,也可以通过类名访问