回答
你可以這樣做。但它會更加正確地說:
const char* func(){
return "String";
}
C++規範說,字符串文字被賦予靜態存儲持續時間。我無法鏈接到它,因爲有幾個版本的C++規範在線。 const correctness上的這個頁面是我能找到的最佳參考。
科的ISO/IEC 14882 2.13.4(編程語言 - C++)表示:
字符串文字是由雙引號所包圍,任選的字符序列(如在2.13.2中定義的) 以字母「L」開頭,如「...」或L「...」。不以L開頭的字符串文字是普通的 字符串文字,也被稱爲窄字符串文字。一個普通的字符串文字的類型爲「數組n」,其中n是下面定義的字符串的大小,並且是用給定字符初始化的 。 ...
是否所有字符串文字都是不同的(即,存儲在非重疊對象中)是實現定義的。 嘗試修改字符串文字的效果未定義。
常量不是分配在堆上,而是常量。你不需要銷燬它。
不在現代編譯器中。在現代編譯器中,"String"
的類型爲const char *
,由於const
不匹配,您無法將其分配給char *
。
如果您製作c
a const char *
(並更改函數的返回類型),則代碼將是合法的。通常,字符串文字"String"
將被鏈接器放置在可執行文件的數據部分中,並且在很多情況下,將放在只讀數據的特殊部分。
除C++中有一個特定的規則允許這種隱式轉換以便與C代碼向後兼容。雖然我不能說C++ 0x。 – 2010-08-24 13:36:58
而且沒有理由爲什麼編譯器不能在.text段中放置「String」。 – doron 2010-08-24 13:45:43
你可以做到這一點目前(雖然沒有理由)。但是你不能用C++ 0x來做這件事。他們刪除了字符串文字(類型爲const char[N]
)的棄用轉換爲char *
。
請注意,對於字符串文字,此轉換僅爲。因此,以下兩件事是非法的,其中第一個指定的陣列,並且其中第二個指定的指針進行初始化
char *x = (0 ? "123" : "345"); // illegal: const char[N] -> char*
char *x = +"123"; // illegal: const char * -> char*
GCC不正確,可同時接收,鏘正確地拒絕兩者。
- 1. Stringstream到字符串返回?
- 2. 字符串的返回子字符串
- 3. 返回字符串輸入字符串
- 4. 返回字符串
- 5. 返回字符串
- 6. 返回字符串
- 7. 返回字符串
- 8. 返回多內襯字符串,字符
- 9. PHP返回字符字符串
- 10. 從函數返回字符[] /字符串
- 11. Java:IndexOf(字符串字符串),返回錯誤的字符
- 12. 找到一個字符串,但返回前一個字符串
- 13. numpy.loadtxt返回字符串再版字節字符串,而不是字符串
- 14. 返回字符串匹配
- 15. OpenFileDialog.FileName返回空字符串
- 16. strtok返回字符串?
- 17. Textbox.value返回空字符串
- 18. Edittext返回空字符串
- 19. UIAlertController:textfield不返回字符串
- 20. p:inputTextarea返回空字符串
- 21. preg_replace()返回空字符串
- 22. jHtmlArea返回空字符串
- 23. 從LINQ返回字符串
- 24. 在RequestFactory返回字符串
- 25. md5返回空字符串
- 26. ArrayList返回字符串
- 27. ASP.NET:Server.MapPath返回字符串NOT_A_VALID_FILESYSTEM_PATH
- 28. 調用返回字符串
- 29. file_get_contents返回空字符串
- 30. 返回部分字符串
你的意思是2.13.4/1。雖然我不能編輯它! – Chubsdad 2010-08-24 13:57:25