c++ - 调用 sizeof (*s.begin()) 安全吗?

标签 c++ sizeof

在做一些 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_typemapped_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/

相关文章:

C++类设计问题

c++ - gstreamer-1.0 从 GstAppSink 中的 GstSample 获取数据

c++ - map 有什么问题?

c - 是否没有必要在 8 的倍数地址处存储结构的 double 成员?

c - 如何获取双指针数组的大小?

c++ - 将 strcpy 与 std::vector 一起使用

c++ - 段错误(核心转储)C++

c - 将数组传递给函数后如何知道数组的大小

c - 有符号字符指针和无符号字符指针之间的工作区别是什么?

c - 为什么 sizeof(x++) 不增加 x?