相关疑难解决方法(0)

使用offsetof有​​什么问题?

我正在编译MinGW GCC 4.4.0中的一些c ++代码,并使用以下表单获取警告......

warning: invalid access to non-static data member '<membername>'  of NULL object
warning: (perhaps the 'offsetof' macro was used incorrectly)
Run Code Online (Sandbox Code Playgroud)

这个问题似乎很熟悉 - 我想,之前我曾试图解决这个问题,但我想,但不久之前.代码在Visual C++中构建得很好,但我最近没有在任何其他编译器中构建这个特定的代码.

问题代码是以下模板......

template<typename T>
class c_Align_Of
{
  private:
    struct c_Test
    {
      char m_Char;
      T    m_Test;
    };
  public:
    enum { e_Align = offsetof (c_Test, m_Test) };
};
Run Code Online (Sandbox Code Playgroud)

显然,我可以使用一些条件编译来为此使用特定于编译器的函数,我相信C++ 0x(最后)会使它变得多余.但无论如何,我看不出这种用法有什么不妥offsetof.

非常迂腐,有可能因为T参数类型有时是非POD,所以GCC类c_Test作为非POD和抱怨(抱怨和抱怨 - 我得到近800行这些警告).

由于非POD类型可能会破坏,因此标准的严格措辞令人顽皮offsetof.但是,这种非POD在实践中应该不是问题 - c_Test不会有虚拟表,也不需要运行时技巧来查找偏移量m_Test.

此外,即使c_Test有一个虚拟表,GCC 也会使用内部函数实现offsetof宏,该内部函数总是在编译时根据该特定类型的静态布局进行求值.提供一个工具,然后每次使用时抱怨(抱歉,警告)似乎很愚蠢.

另外,我不是这里唯一一个做这种事的人......

回答合法使用偏移的问题

确实 …

c++ gcc gcc4

20
推荐指数
1
解决办法
1万
查看次数

__builtin_offsetof运算符的用途和返回类型是什么?

C++中__builtin_offsetof运算符(或Symbian中的_FOFF运算符)的用途是什么?

它还有什么回报?指针?字节数?

c++ symbian

7
推荐指数
3
解决办法
9355
查看次数

标签 统计

c++ ×2

gcc ×1

gcc4 ×1

symbian ×1