說明
字符串常量會放入程序的靜態區,并且是只讀數據段。由于是只讀數據,編譯器會合并相同的字符串常量。
實驗代碼
/** * @file constant_string.cpp * @brief 測試常量字符串 * @copyright public domain */#include <iostream>int main() { char* a = "string"; const char* b = "string"; std::cout << "a == b is " << (a==b ? "true" : "false") << std::endl; a[1] = 'd'; // ERROR return 0;}
運行及結果
$ g++ constant_string.cpp
constant_string.cpp: In function ‘int main()’:
constant_string.cpp:10:12: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
char* a = "string";
^
$ ./a.out
a == b is true
段錯誤 (核心已轉儲)
a和b的地址相同。
- 編譯器會對
char* a = "string"報警告。
- 對字符串常量的修改會引發程序異常。