C++Primer第五版 6.5.2節練習
練習6.43:你會把下面的哪個宣告和定義放在標頭檔案中?哪個放在原始檔中?為什麼?
(a) inline bool eq(const, BigInt &, const BigInt &){…..}
(b) void putValues(int *arr, int size);
答:a的宣告和定義需要放在標頭檔案中,因為a是行內函數,有可能在使用中被頻繁呼叫,所以放在標頭檔案中,可以方便使用。
b的宣告可以放在標頭檔案中,定義放在原始檔中,常規做法。
練習6.44:將6.2.2節(第189頁)的isShorter函式改寫成行內函數。
答:程式見雲盤程式。
練習6.45:回顧在前面的練習中你編寫的那些函式,它們應該是行內函數嗎?如果是,將它們改寫成行內函數:如果不是,說明原因。
答:我的回答是,它們當然不是行內函數,因為是針對特定題目編寫的函式,並沒有去頻繁呼叫這些函式。當然,你也可以回答是行內函數,那就去改寫吧,僅代表個人觀點。
練習 6.46:能把isShorter函式定義成constexpr函式嗎?如果能,將它改寫成constexper函式,如果不能,說明原因。
答:不能定義成constexpr函式,因為主要的比較過程,是比較s1.size(),s2.size(),而在函式體中,這兩個值是無法確定的,只有編譯連結後才能確定,因為,它們不能構成常量表達式,也就無法定義成constexpr函式。
根據書上的話說:函式的返回型別以及所有形參的型別都的是字面值型別,而且函式體中必須有且只有一條return語句。
練習6.44
/*
*練習6.44
*2015/6/24
*問題描述:練習6.44:將6.2.2節(第189頁)的isShorter函式改寫成行內函數。
*功能:改寫成行內函數
*作者:Nick Feng
*郵箱: [email protected]
*
*/
#include <iostream>
#include <string>
using namespace std;
inline bool isShorter(const string &s1,const string &s2)
{
return s1.size() < s2.size();
}
int main()
{
const string s1 = "hi";
const string s2 = "world";
if (isShorter(s1, s2))
cout << "s1 is shorter! " << endl;
else
cout << "s2 is shorter! " << endl;
return 0;
}
相關推薦
C++Primer第五版 6.5.2節練習
練習6.43:你會把下面的哪個宣告和定義放在標頭檔案中?哪個放在原始檔中?為什麼? (a) inline bool eq(const, BigInt &, const BigInt &){…..} (b) void putValues(in
C++Primer第五版 6.3.2節練習
練習6.30:編譯第200頁的str_subrange函式,看看你的編譯器是如何處理函式中的錯誤的。 答: E:\C++ Primer 第五版 練習和解答\第六章 函式\習題程式\練習6.30.cpp [Error] return-statement wi
C++Primer第五版 7.5.4節練習
練習7.47:說明接受一個string引數的Sales_data建構函式是否應該是explicit的,並解釋這樣做的優缺點。 答:應該是explicit,這樣就不能通過隱式轉換將string引數傳給建
C++Primer第五版 3.5.1節練習
練習 3.27: 假設txt_size是一個無引數的函式,它的返回值是int。請回答下列哪個定義是非法的?為什麼? Unsigned buf_size = 1024; (a) int ia[buf
C++Primer第五版 7.5.1節練習
練習7.36:下面的初始值是錯誤的,請找出問題所在,並嘗試修改它 Struct X{ X(int i, int j) : base(i), rem(base%j){} Int rem,base; }; 答:發生未定義的錯誤,因為資料成員的順序先是rem,
C++Primer第五版 3.4.2節練習
練習3.24:請使用迭代器重做3.3.3節(第94頁)的最後一個練習。 練習3.25:3.3.3節(第93頁)劃分分數段的程式是使用下標運算子實現的,請利用迭代器改寫程式並實現完全相同的功能。 練習
C++Primer第五版 12.1.4節練習
練習12.14:編寫你自己版本用的shared_ptr管理connection函式。 答:這一節看得雲裡霧裡,也很久沒跟新了,所以我把書上的程式碼複製一遍,算完成題目 struct destin
C++Primer第五版 5.4.1節練習
練習5.14:編寫一段程式,從標準輸入中讀取若干string物件並查詢連續重複出現的單詞。所謂連續重複出現的意思是:一個單詞後面緊跟著這個單詞本身。要求記錄連續出現的最大次數以及對應的單詞。如果這樣的單詞存在,輸出重複出現的最大次數。如果不存在,輸出一條資訊說明任何單詞都沒有
C++Primer第五版 12.2.2節練習
練習12.26:用allocator重寫第427頁中的程式。 /* *2016/1/25 *練習12.26:用allocator重寫第427頁中的程式。 *說明:無 *作者:Nick Fen
C++Primer第五版 12.1.5節練習
練習12.16:如果你試圖拷貝或賦值unique_ptr,編譯器並不總是能給出易於理解的錯誤資訊。編寫包含這種錯誤的程式,觀察編譯器如何診斷這種錯誤。 答:錯誤程式碼如下 #include &l
《C++ Primer第五版》讀書筆記(5)--解決執行時錯誤version `GLIBCXX_3.4.15' not found
今天在編譯完一個小程式,執行時報錯: [[email protected] programmer]$ prog1 prog1: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (requi
C++Primer第五版 2.1.3節練習
練習2.5:指出下述字面值的資料型別並說明每一組內幾種字面值的區別。 (a).‘a’,L’a’, “a”,L”a” (b).10 , 10u , 10L, 10uL, 012, 0xC (c).3.14 , 3.14f , 3.14L (d).10 , 10u, 10
C++ Primer(第五版) 第九章:順序容器
賦值運算 prime 練習 erase 內部 判斷 相同 編譯 中間 練習9.1:考察使用哪種順序容器 (a)list,當需要在容器中任意位置執行插入/刪除操作時,用list最好 (b)deque,當需要在頭部插入/刪除元素,不需要在容器中間任意位置插入/刪除元素時,用de
C++ Primer(第五版) 第八章:IO庫
cor 三種 cer record info pre hide std 2-0 練習8.1:考察如何管理流的狀態 1 istream& func(istream& is) 2 { 3 string buf; 4 while ( is>
C++ Primer(第五版) 整理和總結
.cn 可能 體系 習題 內置 需要 如果 內存 標準庫 Preface:本博文不記錄C++課後習題答案,而是通過一種提問+解答的方式對每章的內容進行梳理,用於自我回顧和總結,真正做到將所讀的知識變成自己的東西 在這裏引用孟巖老師的一段話(來源於https://blog.c
C++ Primer 第五版第六章習題答案
書籍版本:2019年9月第一版;王剛 楊巨峰譯;電子工業出版社 編譯器 : win10 && VS2015 6.1 形參是定義在函式中的虛擬值,實參是形參的初始值。 6.2 a. 返回值是int型別,不能return
c++ primer第五版----學習筆記(十九)Ⅱ
部分習題解答: 19.1、19.2: #include <iostream> #include <cstdlib> using namespace std; void *operator new(size_t size) { cout << "new(
c++ primer第五版----學習筆記(十九)Ⅰ
文章目錄 ==特殊工具與技術== 1.控制記憶體分配 1.1 過載new和delete 1.2 定位new表示式 2. 執行時型別識別 2.1 dynamic_cast運算子 2.2 typeid運算子
c++primer第五版----學習筆記(十八)Ⅱ
部分習題解答: 18.1: (a)range_error (b)exception 如果寫成throw p,則丟擲指標,是錯誤的18.2: 發生異常,所在塊之前的臨時變數都會被銷燬,v呼叫vector類的解構函式進行銷燬,並釋放相關記憶體;p指標會被銷燬,但p指向的記憶體是動態分配的,所以該記憶
c++ primer第五版----學習筆記(十八)Ⅰ
用於大型程式的工具:異常處理、名稱空間和多重繼承 特殊要求: 在獨立開發的子系統之間協同處理錯誤的能力 使用各種庫(可能包含獨立開發的庫)進行協同開發的能力 對比較複雜的應用概念建模的能力 1.異常處理: 異常處理機制允許程式中獨立開發的部分能夠在執行