【发布时间】:2013-01-03 03:23:17
【问题描述】:
void f(char* p)
{}
int main()
{
f("Hello"); // OK
auto p = "Hello";
f(p); // error C2664: 'void f(char *)' : cannot convert parameter 1
// from 'const char *' to 'char *'
}
代码使用 VC++ Nov 2012 CTP 编译。
§2.14.15 字符串文字,第 7 节
窄字符串文字的类型为“n const char 数组”,其中 n 是 字符串的大小如下定义,并具有静态存储 持续时间。
为什么f("Hello") 可以?
【问题讨论】:
-
一个更具描述性的问题是“为什么我的编译器没有报告
f("Hello")的错误?” -
@DrewDormann - 但你的标题只对 tenOP 有帮助 - 对于其他用户来说,更通用的标题是有用的 - 标题 +1
-
@Mark 我认为标题很好。关于“OK”的问题具有误导性。
-
在 C 中,p 是
int,而不是const char*。它被声明为自动范围,但没有类型(因此默认为int)。这个问题的C标签应该被删除。
标签: c++ c type-conversion implicit-conversion string-literals