我已经使用 GCC 4.8 测试了以下代码,因为我们无法形成对 void 的引用,所以无法编译。
#include <iterator>
int main()
{
std::iterator_traits<void*> test;
}
这是否意味着 void* 不是迭代器?(意思是这里的概念)
编辑:
好的,问题不正确。我实际上要问的是为什么 C++ 需要这样的 void* 行为?是出于安全考虑,即防止人们写坏东西吗?
因为虽然延迟 void 是非法的,但指针算术是:
int main()
{
std::uint8_t test[] = {1,2,3};
void * wut = test;
std::uint8_t * p2 = static_cast<std::uint8_t *>(wut + 1);
std::cout << std::hex << static_cast<int>(*p2) << std::endl;
}
因此,即使如您所说, void 没有大小,从 GCC 的角度来看,它确实如此。它是计算机中最小的可寻址单元的大小。