Declaration after use(使用后申报)
本文介绍了使用后申报的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
C++20标准草案N4861第节。6.5.1(7)内容:在类的定义中使用的名称X在 应声明X的完整类上下文...在将其用于 类X或是X的基类的成员...
那么为什么要编译以下代码?
#include <iostream>
struct X {
X(const int i_) : i(i_) {}
int f() const { return 3*g(); }
int g() const { return 2*i; }
const int i;
};
int main()
{
const X x{7};
std::cout << x.f() << "
";
}
我的意思是,当然,它确实应该编译,并且确实编译了,输出是42,正如人们所预期的;但我不理解标准的措辞。标准是在使用之前声明,但在本例中,g()不是在使用之后声明的吗?和i。
推荐答案
您引用的段落的关键部分是
在完整类上下文之外
在成员函数体中,您处于完整类上下文中。这意味着该规则不适用。
完整类上下文的完整定义位于[class.mem.general]/7:
类(模板)的完整类上下文是
- 函数体([dcl.fct.Def.General]),
- 默认参数([dcl.fct.default]),
- 默认模板参数([temp.param]), NOEXCEPT-说明符([EXCEPT.SPEC])或
- 默认成员初始值设定项
这篇关于使用后申报的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:使用后申报
基础教程推荐
猜你喜欢
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 常量变量在标题中不起作用 2021-01-01
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
- 我有静态或动态 boost 库吗? 2021-01-01
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 这个宏可以转换成函数吗? 2022-01-01
