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

C++Primer第五版 6.3.2節練習

練習6.30:編譯第200頁的str_subrange函式,看看你的編譯器是如何處理函式中的錯誤的。
答: E:\C++ Primer 第五版 練習和解答\第六章 函式\習題程式\練習6.30.cpp [Error] return-statement with no value, in function returning ‘bool’ [-fpermissive]

練習6.31:什麼情況下返回的引用無效?什麼情況下返回常量的引用無效?
答:函式終止意味著區域性變數的引用將指向不再有效的記憶體區域。
返回常量的引用無效:在函式內部對常量引用做類似賦值拷貝等動作

練習6.32:下面的函式合法嗎?如果合法,說明其功能;如果不合法,修改其中的錯誤並解釋原因。

int &get(int *arry, int index){return arry[index];}
int main()
{
int ia[10];
for (int i = 0; i != 10; ++i)
    get(ia, i) = i;
}

答:錯誤 int *arry 在函式內部定義,返回區域性物件的指標也是錯誤的。一旦函式完成,區域性物件被釋放,指標將指向一個不存在的物件。

練習6.33:編寫一個遞迴函式,輸出vector物件的內容。
答:見雲盤程式

練習6.34:如果factorial函式的停止條件如下所示,將發生什麼情況?
if(val != 0)
答:最後運算的結果為0,因為val == 0,函式停止

練習6.35:在呼叫factorial函式時,為什麼我們傳入的值是val – 1而非 val–?
答:假設 val = 3;
Int j = val -1 ; //此時j = 3-1 =2
Int j= val–;//則 j等於3,即j等於val的當前值,val再進行減1操作,結果不對。

練習6.33

/*
*練習6.33
*2015/6/17
*問題描述:練習6.33:編寫一個遞迴函式,輸出vector物件的內容。
*功能:遞迴列印  
*作者:Nick Feng 
*郵箱:[email protected] 
* 
*/

#include <iostream>
#include <vector>
using namespace std; void print(vector<int> ivec, vector<int>::size_type j) { if (j != ivec.size()-1 ) print(ivec , j+1); cout << ivec[j] << endl; } int main() { int val; vector<int> ivec; while (cin >> val) ivec.push_back(val); print(ivec,0); return 0; }

相關推薦

C++Primer 6.3.2練習

練習6.30:編譯第200頁的str_subrange函式,看看你的編譯器是如何處理函式中的錯誤的。 答: E:\C++ Primer 第五版 練習和解答\第六章 函式\習題程式\練習6.30.cpp [Error] return-statement wi

C++Primer 6.5.2練習

練習6.43:你會把下面的哪個宣告和定義放在標頭檔案中?哪個放在原始檔中?為什麼? (a) inline bool eq(const, BigInt &, const BigInt &){…..} (b) void putValues(in

C++Primer 5.4.1練習

練習5.14:編寫一段程式,從標準輸入中讀取若干string物件並查詢連續重複出現的單詞。所謂連續重複出現的意思是:一個單詞後面緊跟著這個單詞本身。要求記錄連續出現的最大次數以及對應的單詞。如果這樣的單詞存在,輸出重複出現的最大次數。如果不存在,輸出一條資訊說明任何單詞都沒有

C++Primer 7.5.4練習

練習7.47:說明接受一個string引數的Sales_data建構函式是否應該是explicit的,並解釋這樣做的優缺點。 答:應該是explicit,這樣就不能通過隱式轉換將string引數傳給建

C++Primer 12.1.5練習

練習12.16:如果你試圖拷貝或賦值unique_ptr,編譯器並不總是能給出易於理解的錯誤資訊。編寫包含這種錯誤的程式,觀察編譯器如何診斷這種錯誤。 答:錯誤程式碼如下 #include &l

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 12.1.4練習

練習12.14:編寫你自己版本用的shared_ptr管理connection函式。 答:這一節看得雲裡霧裡,也很久沒跟新了,所以我把書上的程式碼複製一遍,算完成題目 struct destin

C++Primer 4.3練習

練習 4.8:說明在邏輯與、邏輯或及相等性運算子中運算物件求值的順序。 答:運算子優先順序由高到低排列: ==,&& ,||,按照這個優先順序進行值的求解。 練習 4.9:解釋在下面的if語句中條件部分的判斷過程。 const char

C++Primer 3.4.2練習

練習3.24:請使用迭代器重做3.3.3節(第94頁)的最後一個練習。 練習3.25:3.3.3節(第93頁)劃分分數段的程式是使用下標運算子實現的,請利用迭代器改寫程式並實現完全相同的功能。 練習

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 12.2.2練習

練習12.26:用allocator重寫第427頁中的程式。 /* *2016/1/25 *練習12.26:用allocator重寫第427頁中的程式。 *說明:無 *作者:Nick Fen

C++Primer 3.5.1練習

練習 3.27: 假設txt_size是一個無引數的函式,它的返回值是int。請回答下列哪個定義是非法的?為什麼? Unsigned buf_size = 1024; (a) int ia[buf

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