gpt4 book ai didi

c++ - 模板中的名称解析和实例化点

转载 作者:行者123 更新时间:2023-11-28 01:10:16 25 4
gpt4 key购买 nike

这是来自 ISO C++ 标准 14.6.4.1 实例化点的声明

 4.If a virtual function is implicitly instantiated, its point of instantiation
is immediately following the point of instantiation of its enclosing
class template specialization.

5.An explicit instantiation directive is an instantiation point for the
specialization or specializations specified by the explicit
instantiation directive.

6.The instantiation context of an expression that depends on the
template arguments is the set of declarations with external linkage
declared prior to the point of instantiation of the template
specialization in the same translation unit.

我无法为整个部分编写程序。从昨天开始,我正在尝试为这一部分编写一个程序。

拜托,正常情况下我会尽量要求1分或更多分。在任何部分。但是在这里我无法理解本节中的任何一点。

那么,任何人都可以为我提供一个代码让我理解这部分内容。

最佳答案

前两个语句解释了某些模板构造的实例化点在哪里;它没有引入新的模板结构。因此,您可以重复使用之前的示例。

第三条语句(14.6.4.1/6)告诉我们实例化点的意义是什么:它们是名称查找的第二阶段中查找名称的点。在实例化点之前声明的名称是可见的;那些后来宣布的不是。 (在两阶段名称查找的第一阶段,在模板定义之前的声明集中查找非依赖名称)。

所以,给定:

template <typename T> void foo() {
T() + T();
}

表达式的实例化上下文 T()+T()foo<T> 的各个实例化点之前的一组声明.姓名operator+在这些上下文中查找,并包括遵循此定义但在实例化点之前的声明。

关于c++ - 模板中的名称解析和实例化点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3810281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com