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++,'if' 表达式中的变量声明 2021-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17