c++ - 我可以在不创建结构实例的情况下获得结构字段的大小吗?

标签 c++ sizeof

如果你有一个结构的实例,那么在 C++ 中获取结构字段的大小是很简单的。例如。 (未编译):

typedef struct Foo {
    int bar;
    bool baz;
} Foo;

// ...

Foo s;
StoreInSomething(s.bar, sizeof(s.bar)); // easy as pie

现在我仍然可以做这样的事情,但是使用我正在实现的接口(interface)(我得到一个 BOOL,指示位域中特定位的状态应该是什么),我将创建结构仅用于获取数据成员的大小。有没有办法向编译器指示它应该使用结构字段的大小而不创建结构的实例?这将是哲学上的等价物:

SetBit(bool val) {
    StoreInSomething(
        BITFIELD_POSITION_CONSTANT, // position of bit being set
        val,                        // true = 1, false = 0
        sizeof(Foo::bar));          // This is, of course, illegal.  (The method I've been told I must use req's the size of the target field.)
}

在堆栈上创建结构应该既快又便宜,但我怀疑我会在代码审查中对此感到厌烦,所以我正在寻找一种不会引入额外维护负担的更好方法(例如 #defines 大小)。

最佳答案

您可以使用如下表达式:

sizeof Foo().bar

由于 sizeof 的参数没有被评估,只有它的类型,没有实际创建临时。


如果 Foo 不是默认可构造的(与您的示例不同),则您必须使用不同的表达式,例如涉及指针的表达式。 (感谢 Mike Seymour)

sizeof ((Foo*)0)->bar

关于c++ - 我可以在不创建结构实例的情况下获得结构字段的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3718910/

相关文章:

c++ - 声明为 float& 类型的引用数组

c - c中的sizeof mmap,我们如何知道我分配了多少内存

c - C 中结构体大小的解释?

c - 为什么稀疏报告 sizeof(bool) 警告?

c++ - 在 C++ 上包含文件以避免循环依赖的 final方法

c++ - 使用委托(delegate)一次编辑多个数据项

c++ - Nodejs native 插件奇怪的段错误

c++ - 在 ostream 上使用 std::endl 使我的文件成为二进制文件

c - 如何找到数组的大小(从指向数组第一个元素的指针)?

以 vector 作为成员的结构的 C++ 大小