C++primer 第五版 *笔记三 [渣渣进化记]

【第五章】语句

· continue语句:终止最近的循环中的当前迭代并立即开始下一次迭代(不太懂其用法,以后用到再回来补充)

· try 语句块 和 异常处理

练习:5.25

#include <iostream>
#include <string>

int main()
{
	int a, b;
	double c = 0;	
	while (std::cin>> a >> b)
	{
		try
		{
			if(b == 0)
				throw std::runtime_error("error");
			c = a / b;
			std::cout<< c << std::endl;
		}
		catch(std::runtime_error err)
		{
			std::cout<<err.what()<<"try again? enter y or n"<<std::endl;
			char c;
			std::cin >> c;
			if(!std::cin || c == 'n')
				break;
		}
	}	
	return 0;
}  


【第六章】

· const 形参和实参

当实参初始化形参时会忽略掉顶层const

void fcn(const int i){}
void fcn(int i){}  //错误,重复定义了fcn(in


· 尽量使用常量引用:

1、若将例子中的第一个形参定义为普通的 string & 则find_char只能作用于string对象,对find_char("hello world", 'o', ctr)这样的调用在编译时会出错

string::size_type find_char(string &s, char c, string::size_type &occurs)


2、若其他函数它们的形参定义为常量引用,则第二个版本的find_char无法在此类函数中正常使用。若将例子中的第一个形参定义为普通的 string

bool is_sentence(const string &s)
	{
		string::size_type ctr = 0;
		return find_char(s, '.', ctr) ==s.size() - 1 && ctr == 1;
	}

发生错误,s是常量引用,find_char 只能接受普通引用

· 含有可变形参的函数

initializer_list 形参 :函数的实参数量未知,但实参的类型相同

void error_msg(initializer_list<string> li)
{
	for(auto beg=li.begin(); beg!=li.end(); ++beg)
		cout << *beg <<"";
	cout << endl;
}

如果向initializer_list 形参中传递一个值的序列,则必须放在花括号里

error_msg({"functionX", expected, actual});

 · 省略符形参:便于C++访问某些特殊的C代码,只能出现在形参列表的最后一个位置

void foo(parm_list,...);
void foo(...);

· 内联函数可避免函数调用的开销,内联函数房子头文件内。用法:在函数的返回类型前面加上关键之inline

· assert(expr) 若表达式为假,输出信息并终止程序。若为真,什么都不做

· NDEBUG 预处理变量








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值