在做一些 TMP 时 :) :( 我最终需要 STL 容器包含的元素的大小。 我知道通常在不检查容器是否为空的情况下取消引用 container.begin() 迭代器是不好的,但据我所知,sizeof 是编译时宏,所以我猜想它是安全的。 我说得对吗?
代码片段是:
for(auto it = t.begin(); it!= t.end(); ++it)
{
char* cp = (char*)(&(*it));
for (size_t i =0 ; i < sizeof *t.begin();++i)
//...
}
最佳答案
是的,这是安全的,但请注意,您可以通过 key_type
、mapped_type
和/或 value_type
获取存储在容器中的类型> typedef
成员。
例如:
struct Foo {
int bla;
double quuxly;
};
int main()
{
typedef std::vector<Foo> foovector;
std::cout << "sizeof(Foo) == " << sizeof(foovector::value_type) << "\n";
}
[sizeof
不是宏,顺便说一句。它是语言本身内置的运算符,如 ++
或 |=
。]
关于c++ - 调用 sizeof (*s.begin()) 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11797268/