gpt4 book ai didi

C++ Void 非指针

转载 作者:太空狗 更新时间:2023-10-29 19:38:57 25 4
gpt4 key购买 nike

我在想,为什么不能有不是指针的void数据类型呢?

当然,您可以通过拥有来克服整个确定的大小问题

void4
void8
void32

然后只允许将 void 数据类型“转换”到另一个类,前提是它的大小等于或小于类的大小。

我是否遗漏了什么,或者 C++ 委员会认为这是不好的做法?

编辑:

我自己解释的不是很清楚,所以我举一个例子来说明它的用法:

 main()
{
/*

Lets make a list of unknown elements

std::string is 8 bytes, and float is 4
bytes, so we'll reserve 8 byte sequences

*/

vector<void8> elements;

elements.push_back((void8) string("First string element"));

elements.push_back((void8) float(5.76) );

elements.push_back((void8) string("Third string element"));

// Ect.

cout << (string) elements[0];
cout << (float) elements[1];
cout << (string) elements[2];
cout << (float) elements[2]; // Garbage


void1 data;

data = (void1) bool(1);
data = (void1) unsigned int(80094); // Error, not enough size
}

之所以命名为void,是因为你不知道它当前存储的是什么类型,类似于void指针。

最佳答案

它被称为 boost::variant 或 boost::any。它是最大允许数据类型的大小 + sizeof(pointer) 并且是完全类型安全的。

关于C++ Void 非指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3565388/

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