C++ Primer学习 《语句-Statements》
来源:互联网 发布:手机剪切视频的软件 编辑:程序博客网 时间:2024/05/21 08:55
语句-Statements
switch语句
关于case的值
case关键词和对应的值,这两者一起被称作case标签(case label)。这个值必须是constant int
int sa = 0;switch (..){case sa://error!sa不是constantbreak;}
case内的变量初始化
switch语法有一个比较麻烦的地方,就是任一case内不能有变量初始化语句,除非用{}将该变量初始化语句包起来。具体的:
//在各个case间,如果没有{}将case内容包起来,那么写在下面的case语句的范围(scope)包括了上面的case语句!因此,如果在上面的case语句对某个变量做初始化,那么程序有可能跳过这个初始化,而下面的case语句如果对该变量直接调用,就会发生意外情况!因此,这个语法是被禁止的!case 1: string f;//error!控制语句会跳过这个隐式初始化语句 int ival = 0;//error!控制语句会跳过这个显式初始化语句 int jval;//ok!只声明,没有初始化 break;case 2: jval = 1;//ok!jval在范围内(in-scope) cout<<f<<endl;//error!如果上面的f可以被初始化,这里就能直接输出f,而控制语句事实上会跳过前面的初始化过程,到这这里的输出发生错误! break;而如果我们一定要做初始化,那么需要用到{}
case 1:{ string f = "f";//ok!}break;case 2: cout<<f<<endl;//error! f不在范围内(not in-scope)
Range For
这是C++新的特性,非常非常好用!
基本语法
for(declaration : expression) statement
这里expression必须是一个序列,例如一个braced initializer list(例如: {1, 2, 3, 4}),一个数组,一个vector或string这样的具有返回begin和end这样的迭代器(iterator)成员的object。
而declaration定义了一个变量(注意,和traditional for不同,这里必须是定义一个新的变量!),expression序列中的每一个元素都必须能转换成declaration的变量。
最简单的方法是用auto来定义这个变量~
如果我们在range for中需要同时修改expression序列中的值,那应该把变量定义为reference!
Range For中不应该添加或删除元素
在range for中有一个禁忌,就是对expression中的序列不应该增加或删除元素!这是因为,range for通过该序列的begin和end这两个地址,来遍历序列,如果意外增加和删除序列,会改变end的位置!VS2013中,这个错误在编译时不会提示,但在运行时会立刻报错(debug模式下)。
在String中的应用(其他类中使用方法完全类似)
string str("some string");for(auto c: str) cout<<c<<endl;
改变内容
如果想通过ranged-based for改变expression的内容,我们需要将declaration声明成reference
例如:
for(auto &c : s) c = toupper(c);
do-while 语句
在do-while中有一点需注意,那就是while后的括号内不能有变量声明或初始化。
do{...}while(int a);//error!
Goto 语句
C++强烈不推荐使用goto语句,事实上很少很少需要用到它。
语法
goto label;//label是用:标示的,如:end : return;label的标示名与变量名是不冲突的。然而,这个标示名属于预编译(precompile)的,和头文件中我们常常定义的#ifndef...#define...是一样的,它们之间不能重名。
注意的是,label标示和goto语句必须在同一个函数内!
- C++ Primer学习 《语句-Statements》
- c++Primer学习笔记(5)--语句
- c++primer学习笔记(6.0)语句
- C++Primer学习笔记(6)语句
- C Primer Plus学习 七 while语句
- C Primer Plus学习 十 if语句
- C++primer学习笔记-第六章语句
- C++primer学习笔记-----5.3条件语句
- C++Notes02_输入输出语句(I/O Statements)
- 《C++primer》 表达式 语句
- C++Primer 语句
- c++Primer,六,语句
- c++primer要点-语句
- C++primer 语句
- C++Primer学习笔记第六章(6/18)语句
- c++primer学习笔记4 - 表达式和语句
- 《C++primer(第五版)》学习之路-第五章:语句
- 《C++Primer 5e》学习笔记(4):语句
- 简单记录,设置一体化状态栏背景颜色的方法
- 解决头文件相互包含问题的方法
- 幂次法则power law
- 整数与字符串转换
- LVM的创建与删除
- C++ Primer学习 《语句-Statements》
- Eclipse快捷键 10个最有用的快捷键
- leetcode->Candy
- 程序员生存定律--表达背后的力量(2)【转】
- 把datetime类型的日期转化成年月日或其他格式方法总结
- vim下如何删除空格行和删除行首空格和行尾空格<转>
- spring四种依赖注入方式
- 谁说说抽象类不能被构造的
- Oracle实例恢复(Oracle instance recovery)