C++名稱空間、標準輸入輸出、引用

小楠同志發表於2024-07-29

1、簡述C++中名稱空間的作用。

答:避免重複定義全域性變數的問題。

2、定義兩個名稱空間A 和 B 分別在A中和B中定義變數value。在main函式中將兩個空間的value列印出來。

#include "iostream"
using namespace std;
namespace A
{
    int value = 100;
}
namespace B
{
    int value = 10;
}
int main()
{
    cout << "名字空間A中value值為:" << A::value << endl;
    cout << "名字空間B中value值為:" << B::value << endl;
}

3、const int a; 在C++編譯器中是否需要初始化,為什麼?

需要初始化,因為const修飾的變數為只讀屬性,定義後不允許再對變數a做賦值操作,即如果未在定義變數的同時對a進行賦值,a的值預設為0且後續不允許改變值。

4、在c++中怎麼使用c庫函式?

方法一:
在.c檔案中寫入條件編譯

#ifdef _cplusplus
Extern “C”{
………………
				}(在複合語句中寫入c庫函式及其程式碼)
#endif

方法二:
直接在.cpp檔案中用extern “C”{包含C庫函式的標頭檔案檔案}
在進行編譯的時候:

g++ 檔名.cpp  -I(路徑/到標頭檔案) -L(路徑/到庫檔案) -l(庫名)

5、C++的常用字尾有哪些?

  • .cpp
  • .hpp
  • .cc
  • .h
  • .cxx

6、名稱空間的匿名空間的作用,以及與C語言中的static 的異同點?

匿名空間的定義提升了程式碼的書寫速度,使原來的std::變數--->::變數,可直接呼叫
匿名空間的作用與Static的相同點,在呼叫函式內部定義的區域性變數不會隨著函式的呼叫結束而被釋放記憶體,而是直至整個程式終止,變數才被釋放記憶體。
匿名空間的作用與Static的不同點,static 作用的作用域在整個工程檔案中都有用而匿名空間僅在定義匿名空間的本檔案中使用。

7、引用與指標的區別

指標 :資料型別 * 指標名 = &變數
引用 :資料型別 & 引用名 = 變數 (資料型別必須與變數型別一致,而且必須要初始化)

  1. 定義和性質
    指標:是一個變數,它儲存的是另一個變數的記憶體地址。指標本身是一個獨立的實體有自己的記憶體空間
    引用:是原變數的一個別名,它並不佔用獨立的記憶體空間,而是與原始變數共享相同的記憶體地址
  2. 初始化
    指標:可以在定義時不初始化,但通常建議初始化以避免指向不確定的記憶體地址。
    引用:必須在定義時初始化,且一旦初始化後,就不能再指向其他變數。
  3. 靈活性
    指標:可以指向其他變數,包括在執行時改變指向。指標也可以有多級,如int p;。
    引用:一旦初始化後,就不能再指向其他變數。引用只能是一級,如int &r = a;,而int &&a;(嘗試定義二級引用)是不合法的。
  4. 空值
    指標:可以指向NULL(或nullptr在C++11及以後版本中),表示不指向任何物件。
    引用:不能為NULL,它必須始終指向一個有效的物件。
  5. sizeof運算
    指標:sizeof運算子返回的是指標本身所佔用的記憶體大小,這取決於系統架構(如32位或64位)。
    引用:sizeof運算子返回的是被引用物件的大小,而不是引用本身的大小(因為引用不佔用獨立的記憶體空間)。
  6. 運算
    指標:支援多種運算,如算術運算(加減)、比較運算等,這些運算通常基於指標所指向的記憶體地址。
    引用:不支援算術運算,它主要用於訪問和修改它所引用的變數的值。
  7. 函式引數和返回值
    作為函式引數:指標傳遞的是地址值,是值傳遞的一種;而引用傳遞的是變數的別名,可以看作是地址傳遞的一種更直觀、更安全的方式。引用作為函式引數時,不需要解引用就可以直接訪問和修改原始變數的值。
    作為函式返回值:函式可以返回引用,允許對返回的物件進行進一步的操作。而指標作為函式返回值時,需要注意指標的有效性和野指標問題。
  8. 安全性
    指標:由於指標的靈活性,它可能帶來更高的風險,如野指標、懸掛指標等問題。
    引用:相對更安全,因為它一旦被初始化後就不能再指向其他變數,減少了出錯的可能性。

相關文章