回答
你可以这样做。但它会更加正确地说:
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. numpy.loadtxt返回字符串再版字节字符串,而不是字符串
- 8. mysqli_real_escape_string()返回空字符串
- 9. 从NSURLRequest返回字符串
- 10. Textbox.value返回空字符串
- 11. p:inputTextarea返回空字符串
- 12. file_get_contents返回空字符串
- 13. WTSQuerySessionInformation返回空字符串
- 14. JOptionPane返回字符串
- 15. 返回部分字符串
- 16. 返回JSON字符串
- 17. jHtmlArea返回空字符串
- 18. mysql返回incorect字符串...
- 19. get_template_directory_uri()不返回字符串
- 20. getElementsByTagName返回字符串
- 21. C++返回字符串
- 22. Javascript getElementById返回字符串
- 23. get_FOO_display返回空字符串
- 24. MySQL以'\'返回字符串
- 25. selection.toString()返回空字符串
- 26. openssl_encrypt返回空字符串
- 27. Linq返回字符串
- 28. Page.User.Identity.Name返回空字符串
- 29. Edittext返回空字符串
- 30. C - 返回字符串
你的意思是2.13.4/1。虽然我不能编辑它! – Chubsdad 2010-08-24 13:57:25