所有编译我试图正确地拒绝代码为什么'int x = +“foo”;'类型错误,但不是语法错误?
int main() {
int x = "foo";
}
与一种类型的误差:const char[4]
不能转换到int
。为什么,同样的编译器(包括Ideone.com)给予相同错误
int main() {
int x = + "foo";
}
,而不是(因为我本来以为)语法错误的因为...标志+
的?我的第一个想法是const char[4]
衰减到一个指针,而指针又被视为一个整数值,所以+
表示“正值”。虽然似乎有点牵强,但我预计会在错误消息中看到const char*
。
http://ideone.com/LYHiH0将'x'改为'const char *'编译,显然这个加号不是语法错误。但我很想知道为什么。作为一个方面说明,在我的ideone中运行时,链接的错误表明'const char *'不能转换为'int',而不是'const char [4]'。 – IllusiveBrian 2014-12-03 15:41:51