C++複習筆記——0_零碎問題及解決筆記
文章目錄
- 1. 怎麼理解int main(int argc, const char \*argv[])?
- 2. `\n`與 `endl` 的區別是什麼?
- 3. `.cpp` 以及 `.h` 檔案的作用?
- 4. include 中的`<>`以及`" "` 區別?
- 5. `"\n"` 以及 `'\n'`區別?
- 6. 是否使用`using namespace std; `?
- 7. C++如何輸入包含空格的字串?
- 8. C++中引用(&)的用法和應用例項
- 9. 在 C++ 中 main 函式前面為什麼要加上資料型別,比如: int void ?
- 10. C 語言 int main() 和 int main(void) 的區別?
1. 怎麼理解int main(int argc, const char *argv[])?
2. \n
與 endl
的區別是什麼?
\n
表示內容為一個回車符的字串。std::endl
是流操作子,輸出的作用和輸出 \n
類似,但可能略有區別。
std::endl
例如:
std::cout << std::endl;
相當於:
std::cout << '\n' << std::flush;
// 或者
std::cout << '\n'; std::fflush(stdout);
對於有輸出緩衝的流(例如cout
、clog
),如果不手動進行緩衝區重新整理操作,將在緩衝區滿後自動重新整理輸出。不過對於 cout
來說(相對於檔案輸出流等),緩衝一般體現得並不明顯。但是必要情況下使用 endl
代替 \n
一般是個好習慣。
對於無緩衝的流(例如標準錯誤輸出流cerr
\n
。
3. .cpp
以及 .h
檔案的作用?
.h
中存放類的宣告,函式原型(放在類的宣告中)。
.cpp
存放函式體。
也就是說,一個存放宣告(declaration),一個存放定義(definition)。
如果我們在一個頭檔案裡聲明瞭一個函式,當我們需要定義這個函式(這個定義是唯一的,也就是隻能定義一次),或者需要使用這個函式時,我們在 .cpp
中需要 include 這個標頭檔案。
同樣地,如果我們在一個頭檔案裡聲明瞭一個類,當我們需要定義類裡的成員函式,或者我們需要使用這個類時,我們在 .cpp
中需要 include 這個標頭檔案。
對於類的設計者來說,標頭檔案就像他們和類的使用者的一個合同,編譯器會強化這一合同,它會要求你在使用這些類裡的函式或結構時必須要宣告。
4. include 中的<>
以及" "
區別?
<>
先去系統目錄中找標頭檔案,如果沒有在到當前目錄下找。所以像標準的標頭檔案 stdio.h
、stdlib.h
等用這個方法。
" "
首先在當前目錄下尋找,如果找不到,再到系統目錄中尋找。 這個用於 include 自定義的標頭檔案,讓系統優先使用當前目錄中定義的。
5. "\n"
以及 '\n'
區別?
"\n"
表示一個字串,只有一個數據是回車符。
'\n'
表示一個字元。
這兩個在輸出上是一樣的。
6. 是否使用using namespace std;
?
真正的開發過程中, 儘量避免使用 using namespace std;
等直接引入整個名稱空間,否則會因為名稱空間汙染導致很多不必要的問題, 比如自己寫的某個函式,名稱正好和 std
中的一樣, 編譯器會不知道使用哪一個, 引起編譯報錯, 建議使用:
std::cout << "Hello World" << std::endl;
等直接由名稱空間組合起來的全稱。
7. C++如何輸入包含空格的字串?
對於C++字串的輸入我們看一下下面這段程式碼:
string s; //定義空字串
cin >> s; //輸入字串
cout << s; //列印
但我們會發現如果我們輸入了還有空格
的字串,s裡讀入的字串遇到空格
,回車
,tab
都會結束,比如我們輸入123 888
,但實際輸入到s裡的只是123
。可以使用getline(cin, s)
或者字串拼接函式當然也可以使用字串拼接函式。
如下:
string inputStr;
getline(cin, inputStr);
cout << inputStr;
8. C++中引用(&)的用法和應用例項
https://blog.csdn.net/love_gaohz/article/details/7517891
9. 在 C++ 中 main 函式前面為什麼要加上資料型別,比如: int void ?
main
函式的返回值是返回給主調程序,使主調程序得知被呼叫程式的執行結果。
標準規範中規定 main
函式的返回值為 int
,一般約定返回 0 值時代表程式執行無錯誤,其它值均為錯誤號,但該約定並非強制。
如果程式的執行結果不需要返回給主調程序,或程式開發人員確認該狀態並不重要,比如所有出錯資訊均在程式中有明確提示的情況下,可以不寫 main
函式的返回值。在一些檢查不是很嚴格的編譯器中,比如 VC, VS 等,void 型別的 main
是允許的。不過在一些檢查嚴格的編譯器下,比如 g++, 則要求 main 函式的返回值必須為int
型。
所以在程式設計時,區分程式執行結果並以 int 型返回,是一個良好的程式設計習慣。
10. C 語言 int main() 和 int main(void) 的區別?
int main(void)
指的是此函式的引數為空,不能傳入引數,如果你傳入引數,就會出錯。
int main()
表示可以傳入引數。
// 這樣是正確的
int main()
{
if (0) main(42);
}
// 這樣會出錯
int main(void)
{
if (0) main(42);
}
在 C++ 中int main()
和 int main(void)
是等效的,但在 C 中讓括號空著代表編譯器對是否接受引數保持沉默。在 C 語言中main()
省略返回型別也就相當說明返回型別為 int
型,不過這種用法在 C++ 中逐漸被淘汰。雖然 void main()
在很多系統都適用,但他畢竟不是標準的,所以應該避免這種用法, 應該使用這種int main(void)
的寫法比較妥當。