1. 程式人生 > >C++Primer第五版 6.5.2節練習

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.異常處理: 異常處理機制允許程式中獨立開發的部分能夠在執行