GEEK学习笔记— —程序猿面试宝典笔记(二)
所謂筆記,就是比較個人的東西,把個人認為有點意思的東西記錄下來~~
程序猿面試寶典筆記(一)基本概念
程序猿面試寶典筆記(二)預處理、const和sizeof
程序猿面試寶典筆記(三)auto_ptr、遞歸
程序猿面試寶典筆記(四)面向對象、類型轉換、static
程序猿面試寶典筆記(五)數據結構基礎
程序猿面試寶典筆記(六)軟件測試
題目
寫一個“標準”宏MIN。這個宏輸入兩個參數并返回較小的一個。
解析
為什么要把如此簡單的題目也放進來呢?為了強調宏定義里面括號的重要性!
。!
答案
#define MIN(A,B) ((A) <= (B) ? (A) : (B))題目
const與指針的關系?const成員函數?以及mutable!
解析
一般分為4種情況:
int b = 500; const int* a = &b; int const* a = &b; int* const a = &b; const int* const a = &b;答案
1)先看情況1。假設const位于星號的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量。假設const位于星號的右側。const就是修飾指針本身。即指針本身是常量。
因此,1和2的情況同樣,都是指針所指向的內容為常量(const放在變量聲明符的位置無關),這樣的情況下不同意對內容進行更改操作。
對于情況1。能夠先不進行初始化。
由于盡管指針內容是常量。但指針本身不是常量。
2)情況2與情況1同樣。
3)情況3為指針本身是常量。這樣的情況下不能對指針本身進行更改操作,而指針所指向的內容不是常量。
對于情況3,定義時必須同一時候初始化。
4)對于情況4為指針本身和指向的內容均為常量。
以下再說一下const成員函數是什么?
我們定義的類的成員函數中。經常有一些成員函數不改變類的數據成員,也就是說。這些函數是“僅僅讀”函數。而有一些函數要改動類數據成員的值。
假設把不改變數據成員的函數都加上const關鍵字進行標識。顯然。可提高程序的可讀性。事實上,它還能提高程序的可靠性,已定義成const的成員函數,一旦企圖改動數據成員的值,則編譯器按錯誤處理。
在const成員函數中。用mutable修飾成員變量名后,就能夠突破const的限制,改動類的成員變量了。
題目
const與#define相比有什么不同?
答案
C++語言能夠用const定義常量,也能夠用#define定義常量,可是前者比后者有很多其它的長處:
● const常量有數據類型。而宏常量沒有數據類型。編譯器能夠對前者進行類型安全檢查,而對后者僅僅進行字符替換,沒有類型安全檢查。而且在字符替換中可能會產生意料不到的錯誤(邊際效應)。
● 有些集成化的調試工具能夠對const常量進行調試,可是不能對宏常量進行調試。
在C++程序中僅僅使用const常量而不使用宏常量,即const常量全然代替宏常量。
題目
以下兩段程序分別輸出什么?
代碼一
代碼二
#include <iostream>using namespace std;#pragma pack(1) class A { private:static bool a;int b;bool c; };class B { private:int b;bool a;bool c; };int main() {cout << sizeof(A) << endl;cout << sizeof(B) << endl;return 0; }解析
非常明顯,這道題是考察結構的對齊。
一般來說。為了方便對結構體內元素的訪問和管理。結構體的長度一定是最長的數據元素的整數倍。
代碼一類A的對齊為
|bool|—-|—-|—-|
|——–int———|
|bool|—-|—-|—-|
代碼一類B的對齊為
|——–int———|
|bool|bool|—-|—-|
而代碼二用pack預處理指令來禁止對齊調整。所以就是本身的內存大小。
可是須要注意sizeof是計算棧中分配的內存大小,靜態變量是存放在全局數據區。不會被計算在內。
答案
代碼一:類A 12字節;類B 8字節
代碼二:類A 5字節;類B 6字節
轉載于:https://www.cnblogs.com/wzjhoutai/p/7286925.html
總結
以上是生活随笔為你收集整理的GEEK学习笔记— —程序猿面试宝典笔记(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dell 笔记本的 BIOS设置 USB
- 下一篇: 8.依赖的传递、排除、冲突