gpt4 book ai didi

c++ - 为什么是 'int x = + "foo";'类型错误但不是语法错误?

转载 作者:IT老高 更新时间:2023-10-28 21:44:25 26 4
gpt4 key购买 nike

我尝试过的所有编译器都正确拒绝了代码

int main() {
int x = "foo";
}

出现类型错误:const char[4] 无法转换为 int。为什么相同的编译器(包括 Ideone.com )为

给出 same 错误
int main() {
int x = + "foo";
}

而不是(如我所想的)由于 + 符号而导致的语法错误?我的第一个想法是 const char[4] 衰减为一个指针,该指针又被视为一个整数值,因此 + 表示“正数”。不过似乎有点牵强,我本来希望看到 const char* 出现在错误消息中。

最佳答案

语法不涉及类型系统意义上的类型(整数、字符和指针),只涉及关键字、运算符、表达式的语法意义上的类型。在 C++ 语法中,+ 是一个可以位于表达式之前的一元前缀运算符。 "foo" 是一个表达式。因此,就解析器而言,+"foo" 是一个有效的表达式。

您认为字符串常量衰减为指针并且 + 是指针上的无操作的想法是正确的,甚至可以编译并运行以下程序:

#include <iostream>

int main()
{
const char *message = +"Hello!\n";
std::cout << message;
}

...但这无关紧要。您看到的是类型错误,而不是语法错误。

编辑也许更令人信服的是你可以重载一元+:

#include <iostream>

struct SomeType {
const char *operator+() const
{
return "Hello, world!\n";
}
};

int main()
{
SomeType x;
std::cout << +x;
}

关于c++ - 为什么是 'int x = + "foo";'类型错误但不是语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27275635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com