大小(*this)在类定义中
sizeof(*this) in class definition
我们可以做这样的事情吗:
#include <iostream>
class Foo
{
public:
Foo() { std::cout << sizeof(*this) << 'n'; }
};
在 C 标准中,我看到以下内容:
ISO/IEC 9899:2011
6.7.2.1 结构和联合说明符
8 ...该类型不完整,直到紧跟在 } 之后 终止列表,并在此后完成。
但是在C++标准中,我找不到任何类似物。
sizeof 运算符不能应用于类型不完整的表达式,那么我们可以写这样的代码吗?
是的,您可以编写这样的代码,因为编译器必须将其视为类定义在类方法实现中是完整的。
例如,它必须将其视为您编写的内容:
#include <iostream>
class Foo
{
public:
Foo();
};
// Methods declared in the body of a class are implicitly inline
// Inline, however, probably doesn't mean what you think it means:
inline Foo::Foo() { std::cout << sizeof(*this) << 'n'; }
在成员函数体中,该类是完整的 - 否则,您无法访问任何其他成员函数,也无法访问任何成员变量,这将使成员变得毫无价值。
是的,你可以写,结果也会是正确的。
#include<iostream>
using namespace std;
class Foo
{
public:
int x;
Foo() { std::cout << sizeof(*this) << 'n'; }
};
int main(){
Foo b;
b.x=5;
system("pause");
return 0;
}
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 表示"accepting anything for this template argument" C++概念的通配符
- #定义c-预处理器常量..我做错了什么
- 为什么使用 "this" 指针调用派生成员函数?
- 在 c++ 中正确定义"this"关键字?
- 是否是从等待返回到悬而未决的"this"实例的未定义行为?
- 定义非静态成员时获取C++中的"this"类型
- 如何设置"this"线程的自定义名称?
- 为什么 gcc 7.3 接受静态定义中的'this'?
- C++自定义迭代器和(*this)
- 指针上的const_cast "this"是未定义的行为吗?
- 通过"this"访问另一个对象的定义?
- 在构造函数中使用关键字 "this" 时定义复制构造函数
- 在类定义中使用'this'
- 方法定义中的错误"passing const List<int> as this argument discards qualifiers"
- 由 sf::P acket 定义的运算符<<是否与 sf::P acket 派生类的 (*this) 一起工作?
- 是否应该延迟类模板定义中由 this-> 限定的类/命名空间名称的名称查找?
- "Was not declared in this scope"错误结构定义。C++
- 大小(*this)在类定义中
- 从"this"中抛弃恒常性,然后更改成员值是否会调用未定义的行为?