gpt4 book ai didi

c++ - 为什么不能将不完整的类型转换为 void?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:37 26 4
gpt4 key购买 nike

为什么下面的代码会报如下错误?

为什么类型需要完整才能转换为 void

struct Incomplete;
class Class
{
virtual void foo(Incomplete &incomplete)
{
(void) incomplete;
throw std::logic_error("not implemented");
}
};

错误:

error C2027: use of undefined type 'Incomplete'  
see declaration of 'Incomplete'

最佳答案

这是 C 和 C++ 之间的变化,Microsoft 以前在 C++ 中实现了 C 规则。正如 remyabel 的回答中所述,此问题已得到修复。

在 C 语言中,转换为 void,或者简单地使用表达式本身作为语句(如 incomplete;),仍然涉及左值到右值转换。 C 调用它略有不同,但它是相同的转换。

在 C++ 中,转换为 void,或简单地将表达式用作语句本身并不涉及左值到右值的转换。这是必需的,因为 C++ 使赋值运算符返回左值,因此如果应用了左值到右值的转换,则

volatile int i;
i = 1;

不仅会存储,还会立即加载。

左值到右值的转换需要一个完整的类型,即使值随后被丢弃,否则无法知道应该读取多少字节。

关于c++ - 为什么不能将不完整的类型转换为 void?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29180947/

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