CPP基础
CPP基础
1. 如果没有指明访问限定符(public,private),class中默认的private,而struct中的成员默认是public的。
#include <iostream>
using namespace std;
int main()
{
cout<<"Hello world"<<endl;
return 0;
}
2.命名空间namespace
using namespace std;声明后,该命名空间的函数可直接调用。
函数前可不加命名空间,std::cout, std::endl。
此外,程序有一个默认的无名命名空间,若调用全局变量,可::cout(默认的无命名空间函数或变量)。
3.C++中定义了布尔类型
bool类型变量可赋值为true或false。
4.引用类型
引用相当于为某个变量起一个别名,注意引用操作的是变量,不是常量。
int m;
int &n = m;
规则:
1)引用被创建的同时必须初始化(指针则可以在任何时候初始化)。
2)不能有NULL引用,引用必须与合法的存储单元关联。
3)一旦引用被初始化,就不能改变引用的对象。
引用的主要功能是传递函数的参数和返回值。
void swap(int &x, int &y)
{
int temp;
temp = x;
x = y;
y = temp;
}
传引用,实为传变量本身。
引用作函数的返回值,可以作左值。若不想其做左值,可加const修饰。
char arr[10] = {'a', 'b', 'c'};
char & foo(int i)
{
return arr[i];
}
foo(1) = 'h';
5.new和delete为C++关键字
数组:int *arr = new int[10];
delete [] arr;
new和malloc在heap上分配的空间地址不同,因此malloc和free配对使用,new和delete配对使用。
6.函数的缺省参数
c++在声明函数时允许给某些参数制定缺省值。
参数缺省值一般写在声明中。
缺省参数从右向左连续赋值。
6.inline函数
c++中用inline函数来取代C语言中类似函数的宏定义。
使用内联函数时注意inline关键字应该和定义放在一起,而不是和声明放在一起。
由于inline函数相当于宏定义,因此通常将inline函数的实现直接放在头文件中,不写声明。
内联函数优化级为O2。
7.在C++代码中调用C的库函数, 让C函数可以运行在C++环境中(C++支持函数重载,编译时符号名为函数名+参数类型)。
#ifdef __cplusplus
extern "C" {
#endif
int add(int a, int b);
#ifdef __cplusplus
}
#endif
8. C++支持函数overload,两个或两个以上的函数,取相同的函数名,但是形参的个数或类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数。
int add(int, int)在底层被重载为addii,double add(double, double)在底层被重载为adddd。
用nm命令察看可执行文件的符号表。
9. 类的对象中只保存变量,不保存成员函数,sizeof求得的大小只是变量占用的空间。
C++中定义的struct无成员时,也占用一个字节;而在C语言中不占用空间。
CPP基础的更多相关文章
- 个人学习记录-Cpp基础-成员初始化列表
Translator Translator 参考链接: https://blog.csdn.net/XIONGXING_xx/article/details/115553291http ...
- win7 32 bit VS2012 OpenCV3.0配置
今天看CPP基础,想起来之前在vs2012配置opencv3未成功,就忍不住再次配置一... 环境:win7 32bit vs2012 opencv3.0 主要参考这几篇博文:1,2,3 上面的博文已 ...
- 在vs2013下手把手创建/调用dll
body { font: 16px } 参考了大佬的文章 首先,体会一下静态编译: 创建Win32Project,选DLL,添加一个.h和.cpp文件 点击生成解决方案,然后去debug目录下拷贝.l ...
- 双目相机标定以及立体测距原理及OpenCV实现
单目相机标定的目标是获取相机的内参和外参,内参(1/dx,1/dy,Cx,Cy,f)表征了相机的内部结构参数,外参是相机的旋转矩阵R和平移向量t.内参中dx和dy是相机单个感光单元芯片的长度和宽度,是 ...
- 头部姿态估计 - OpenCV/Dlib/Ceres
基本思想 通过Dlib获得当前人脸的特征点,然后通过旋转平移标准模型的特征点进行拟合,计算标准模型求得的特征点与Dlib获得的特征点之间的差,使用Ceres不断迭代优化,最终得到最佳的旋转和平移参数. ...
- QT_study
https://blog.csdn.net/a313827758/article/details/72736552 https://blog.csdn.net/xbcreal/article/deta ...
- [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析
[WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析 标签: webkit内核JavaScriptCore 2015-03-26 23:26 2285 ...
- C++基础知识
基础知识 &&和||具有"短路"特性,特别是在第二个操作数有++或--时要注意. 显式类型转换 (类型说明符)表达式 //C风格的 类型说明符(表达式) //cpp ...
- Storm基础
Storm基本概念 Storm是一个开源的实时计算系统,它提供了一系列的基本元素用于进行计算:Topology.Stream.Spout.Bolt等等. 在Storm中,一个实时应用的计算任务被打包作 ...
随机推荐
- AndroidUI设计 之 图片浏览器
图片浏览器效果图 : 源码下载地址 : -- CSDN : http://download.csdn.net/detail/han1202012/6875083 -- GitHub : https:/ ...
- 物联网将在2018年实现大规模发展--IBM的四大预测
物联网将在2018年实现大规模发展--IBM的四大预测 数据是数字化变革的基本组成部分,物联网.人工智能.区块链.边缘计算等技术预计将在来年掀起巨浪, 因为这些技术是收集.分析和存储信息的方法. ...
- git 权限问题:insufficient permission for adding an object to repository database .git
在git pull 的时候报错:insufficient permission for adding an object to repository database .git (去仓库里的objec ...
- jquery 获取URL参数并转码的例子
通过jquery 获取URL参数并进行转码,个人觉得不错,因为有时不转码就会有乱码的问题.jquery 获取URL参数并转码,首先构造一个含有目标参数的正则表达式对象,匹配目标参数并返回参数值代码: ...
- 不错位的java .class 反编译工具推荐
我们经常会反编译看一些class文件,但是反编译出来的文件里面会有很多杂乱的东西 一直以来都是用的idea来反编译的,只要把class文件往里面一拖就行了 这么用没问题,用来看看源码什么的都OK 但是 ...
- 解决Unity协程无法同步返回的问题
Unity的协程是轻量的异步解决方案,但是每调用一次yield就必须等下一帧才能继续,这一点带来了很多约束. 比如如下代码: void OnEnable() { StartCoroutine(_Do( ...
- apicloud开发笔记
第一次用apicloud做正式项目 ,下面把做的过程中用到的代码段列出来....都是从文档里复制的代码,只是感觉官网那个文档好难找哦... 注:api.????的方法都是在APP中调用才行的,$api ...
- Atitit 软件项目系统托盘图标解决方案
Atitit 软件项目系统托盘图标解决方案 1.1. Nodejs node-webkit还实现了本地化的API,例如菜单栏,系统的托盘图标支持1 1.2. Java c# qt c++1 1.3 ...
- ios使用kvc机制简化对json的解析
在 ios开发中,我们经常需要对服务器的传回来的json进行解析,特别是对哪些字段特别多的就会又烦躁的情绪.tmd都是一样的东西,要为每个property赋值,真是累人啊.举个简单的例子吧.服务器会过 ...
- Golang之字符串格式化
字符串格式化 // Go 之 字符串格式化 // // Copyright (c) 2015 - Batu // package main import ( "fmt" ) typ ...