有直接获取std::vector的元素大小的函数吗?

Is there a function to get the size of std::vector's element directly?

vector::size() 给出了向量中元素的数量,但是我如何获得单个元素的大小?

这就是我在实践中的意思:

std::vector<char>   --> 1
std::vector<int>    --> 4
std::vector<double> --> 8

下一行仅在向量至少有一个元素时有效

int size_of_element = sizeof(myVec[0]);

如果向量中没有元素,它将不起作用。有没有直接获取类型大小的函数?

编辑:好的,显然它确实有效。

正如大家在评论中所说:

sizeof(std::vector<double>::value_type)

sizeof(decltype(myVec)::value_type)

后者需要 C++11,但不需要再次拼写 std::vector 类型。

sizeof(myVec[0])相反,这总是给出正确的结果。前者不是这种情况,因为 std::vector<bool> 有一个例外,它的行为不同于其他 std::vector,特别是 myVec[0] 不会 return a bool&.

除此之外,sizeof(myVec[0]) 总是可以的。即使在您使用该表达式时向量为空,sizeof 的参数也是未计算的操作数。表达式 myVec[0] 并没有被实际求值,向量元素也没有被实际接收到。相反,仅计算结果的类型,并且可以根据类型确定类型的大小。因此,如果向量为空,则不会出现未定义的行为。 怎么可能呢? sizeof 是在编译时求值的,但在编译时我们甚至可能不知道vector中有什么。作为对象的向量通常在编译时甚至不存在。