gpt4 book ai didi

c - 复合文字中使用的强制转换与指针变量上使用的强制转换之间的区别?

转载 作者:行者123 更新时间:2023-12-02 06:44:27 26 4
gpt4 key购买 nike

考虑以下代码:

int main()
{
int *p;

++((int){5}); //compile without err/warning
&((int){5}); //compile without err/warning

++((char *)p); //Compile-time err: invalid lvalue in increment
&((char *)p); //Compile-time err: invalid lvalue in unary '&'

}

为什么复合字面值在这里不产生错误?

最佳答案

这是因为复合文字中的“强制转换”根本不是强制转换——它只是看起来像一个。

复合文字(即完整构造 (int){5})创建左值。然而,与大多数其他运算符一样,强制转换运算符仅创建一个右值。

这个例子是允许的(但没用,就像你的 int 例子):

++((char *){(char *)p});
&((char *){(char *)p});

关于c - 复合文字中使用的强制转换与指针变量上使用的强制转换之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2406933/

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