在静态成员数组定义中对自身使用sizeof操作符
Using of sizeof operator on itself in static member array definition
为什么我得到这个:
error: invalid application of 'sizeof' to incomplete type 'A'
当我尝试这样做时:
class A
{
int m_i;
static char m_j[sizeof(A)];
};
我假设在这种情况下,sizeof(A)显然是sizeof(int)。但我的编译器似乎不这么认为。
如错误信息所示,sizeof
只能操作完整类型。在调用它时,A
还没有完成。
c++编译器从上到下分析你的代码。在调用sizeof
时,类还没有完全定义,因此,大小还不能确定。例如,如果在该行下面有另一个成员声明:
class A
{
int m_i;
static char m_j[sizeof(A)]; // Uh oh, m_i2 is not known here, yet
int m_i2;
};
由于这样的问题,只能在类完全定义之后,即在它的右花括号之后使用sizeof
。
如果你使用模板,这是可能的:
template <class = void>
struct A {
int i;
static auto& m_j() {
static char arr[sizeof(A)];
return arr;
}
};
int main()
{
auto array = A<>::m_j();
}
编译器等待直到使用m_j
实例化函数,此时A
已经完全声明。
相关文章:
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 同一对象的"sizeof"的不同答案
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 为什么 sizeof 在 C++ 中给出不正确的字节数?
- sizeof(size_t) 可以小于 sizeof(int) 吗?
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 为什么 sizeof(ar)/ sizeof(ar[0]) 在传递给函数时无法在向量上正常工作?
- 为什么 MSVC _count_of实现将 0 添加到 sizeof 的结果中?
- alignas() 对 sizeof() 的影响 - 强制性的?
- 在C++中,运算符 sizeof 返回什么数据类型?
- sizeof 函数如何在带和不带位字段的结构上工作?(填充)
- s.length 和 sizeof(a) 有什么区别?
- sizeof(enum) 可以不同于 sizeof(std::underlying_type<Enum>::
- 如何将数组传递给使用 sizeof 的函数?
- sizeof(size_t) 和 sizeof(ptrdiff_t) 什么时候会有所不同?
- sizeof操作符是否优先选择对象而不是类型
- gcc对vla的sizeof操作符的计算方式是否不同
- c和c++中sizeof操作符的工作方式不同吗?
- c++静态数组和sizeof操作符
- 在静态成员数组定义中对自身使用sizeof操作符