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 預處理變量








發佈了7 篇原創文章 · 獲贊 39 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章