C++ 快速入门笔记:基本语法
数据类型
- 枚举类型
enum color { red, green, blue } colors;
colors = blue;
默认情况下,第一个名称的值是 0,后面的依次加 1。也可以自定初始值:
enum color { red, green = 5, blue };
在这里,blue 的值为 6 。
变量类型
- 变量声明
使用多个文件且只在一个文件中定义变量时(定义变量的文件在程序连接时是可用的),可以使用 extern 关键字在任何地方声明一个变量。虽然您可以在 C++ 程序中多次声明一个变量,但变量只能在某个文件、函数或代码块中被定义一次。
#include <iostream>
using namespace std;
// 变量声明
extern int a, b;
extern int c;
extern float f;
int main ()
{
// 变量定义
int a, b;
int c;
float f;
<span class="hljs-comment">// 实际初始化</span>
a = <span class="hljs-number">10</span>;
b = <span class="hljs-number">20</span>;
c = a + b;
<span class="hljs-built_in">cout</span> << c << <span class="hljs-built_in">endl</span> ;
f = <span class="hljs-number">70.0</span>/<span class="hljs-number">3.0</span>;
<span class="hljs-built_in">cout</span> << f << <span class="hljs-built_in">endl</span> ;
<span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
}
同样,在函数声明时,提供一个函数名,而实际定义可以在任意地方进行。
// 函数声明
int func();
int main()
{
// 函数调用
int i = func();
}
// 函数定义
int func()
{
return 0;
}
修饰符类型
- 类型限定符
限定符 | 含义 |
---|---|
const | const 类型的对象在程序执行期间不能被修改改变。 |
volatile | 修饰符 volatile 告诉编译器,变量的值可能以程序未明确指定的方式被改变。 |
restrict | 由 restrict 修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。 |
存储类
auto 存储类
- auto 存储类是所有局部变量默认的存储类。
register 存储类
- register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个词),且不能对它应用一元的 '&' 运算符(因为它没有内存位置)。
static 存储类
- static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。
- static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。
- 在 C++ 中,当 static 用在类数据成员上时,会导致仅有一个该成员的副本被类的所有对象共享。
extern 存储类
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当使用 extern 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。
当有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。例:
// main.cpp
int count ;
extern void write_extern(); int main()
{
count = 5;
write_extern();
}
// support.cpp
#include <iostream> extern int count; void write_extern(void)
{
std::cout << "Count is " << count << std::endl;
}
mutable 存储类
- mutable 说明符仅适用于类的对象。它允许对象的成员替代常量。也就是说,mutable 成员可以通过 const 成员函数修改。
引用
创建引用
int i = 17;
int &r = i;
& 读作引用。因此,第一个声明可以读作 "r 是一个初始化为 i 的整型引用",第二个声明可以读作 "s 是一个初始化为 d 的 double 型引用"。
引用调用
#include <iostream>
using namespace std; // 函数声明
void swap(int &x, int &y); int main ()
{
// 局部变量声明
int a = 100;
int b = 200; cout << "交换前,a 的值:" << a << endl;
cout << "交换前,b 的值:" << b << endl; /* 调用函数来交换值 */
swap(a, b); cout << "交换后,a 的值:" << a << endl;
cout << "交换后,b 的值:" << b << endl; return 0;
} void swap(int &x, int &y)
{
int temp;
temp = x; /* 保存地址 x 的值 /
x = y; / 把 y 赋值给 x /
y = temp; / 把 x 赋值给 y */ return;
}
基本输入输出
- 标准错误流(cerr)
- 预定义的对象 cerr 是 ostream 类的一个实例。cerr 对象附属到标准错误设备,通常也是显示屏,但是 cerr 对象是非缓冲的,且每个流插入到 cerr 都会立即输出。
- 标准日志流(clog)
- 预定义的对象 clog 是 ostream 类的一个实例。clog 对象附属到标准错误设备,通常也是显示屏,但是 clog 对象是缓冲的。这意味着每个流插入到 clog 都会先存储在缓冲在,直到缓冲填满或者缓冲区刷新时才会输出。
</div>
C++ 快速入门笔记:基本语法的更多相关文章
- C#快速入门笔记(1)——基础语法
C#快速入门笔记(1)——基础语法 总体框架:
- keras搭建神经网络快速入门笔记
之前学习了tensorflow2.0的小伙伴可能会遇到一些问题,就是在读论文中的代码和一些实战项目往往使用keras+tensorflow1.0搭建, 所以本次和大家一起分享keras如何搭建神经网络 ...
- C++ 快速入门笔记:进阶编程
C++入门笔记:高级编程 文件和流 打开文件 void open (const char *filename, ios::openmode mode); ios::app 追加模式.所有写入都追加到文 ...
- Pandas快速入门笔记
我正以Python作为突破口,入门机器学习相关知识.出于机器学习实践过程中的需要,我快速了解了一下提供了类似关系型或标签型数据结构的Pandas的使用方法.下面记录相关学习笔记. 数据结构 Panda ...
- NumPy快速入门笔记
我正以Python作为突破口,入门机器学习相关知识.出于机器学习实践过程中的需要,我快速了解了一下NumPy这个科学计算库的使用方法.下面记录相关学习笔记. 简介 NumPy是一个科学计算库.结合Py ...
- Spring Boot 快速入门笔记
Spirng boot笔记 简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发 ...
- Matplotlib快速入门笔记
我正以Python作为突破口,入门机器学习相关知识.出于机器学习实践过程中的需要,快速了解了一下matplotlib绘图库.下图是我学习过程中整理的一些概念. 本文将以该图为线索梳理相关概念. 简介 ...
- [Python]Python入门笔记:语法基础
Python笔记 一.基本语法 1.1 注释 文档注释: """contents""" 多行注释: ''' contents ''' 单行注 ...
- Velocity快速入门教程-脚本语法详解(转)
1.变量 (1)变量的定义: #set($name = "hello") 说明:velocity中变量是弱类型的. 当使用#set 指令时,括在双引号中的字面字符串将解析 ...
随机推荐
- 108.sqllite3(C语言数据库库)详解
//创建数据库,插入表,生效 //创建数据库,插入表,生效 void create_database() { //数据库指针 sqlite3 *db=; //打开数据数据库,初始化指针 int res ...
- 98.TCP通信传输文件
客户端 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include <stdlib.h> #include <s ...
- JavaScript篇(一)二叉树的插入 (附:可视化)
一.二叉树概念 二叉树(binary tree)是一颗树,其中每个节点都不能有多于两个的儿子. 字节一面,第一道就是二叉树的插入,在这里其实是对于一个二叉查找树的插入. 使二叉树成为二叉查找树的性质是 ...
- 洛谷 P1599 结算日
洛谷 P1599 结算日 题目描述 “不放债不借债”,贝西多么希望自己可以遵循这个忠告.她已经和她的N(1 <= N <= 100,000)个朋友有了债务关系,或者借债了,或者放债了.她的 ...
- C# SocketAsyncEventArgs类
Namespace:System.Net.Sockets Assemblies:System.Net.Sockets.dll, System.dll, netstandard.dll (Represe ...
- Day1:字符编码
一.ASCII码 ASCII(American Standard Code for Information Interchange,美国标准信息交换代码),8位,一个字节,最多只能表示255个符号. ...
- windows 控制台下 无法获取完整的回车键值
问题描述: 收集的网友分析: http://bbs.csdn.net/topics/370084904 因为C语言和UNIX的开发者是同事…… C语言里统一用的\n表示另起一行.微软的DOS受到了当时 ...
- 【拆分版】 Docker-compose构建Logstash多实例,基于7.1.0
[拆分版]Docker-compose构建Logstash多实例 写在最前 说起Logstash,这个组件并没有什么集群的概念,与其说是集群,不如说是各自去收集日志分析过滤存储到Elasticsear ...
- flink DataStream API使用及原理
传统的大数据处理方式一般是批处理式的,也就是说,今天所收集的数据,我们明天再把今天收集到的数据算出来,以供大家使用,但是在很多情况下,数据的时效性对于业务的成败是非常关键的. Spark 和 Flin ...
- Snail—Hibernate各种异常
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXExNzkxNDIyMDE4/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...