条款33----避免遮掩继承而来的名称

本文详细解析了C++中继承体系下名称查找的规则,包括局部作用域查找、外层查找过程及对名称和参数的比较规则。通过实例展示了如何在派生类中正确调用被隐藏的基类成员函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C++的继承体系中,名称的查找按照一定的规则进行:首先在局部作用域中进行查找,如果找到则停止,如果没找到则到外层进行查找,一次类推。特别需要注意的是,C++在查找的时候,只会对名字进行比较查找,不会对名字的类型加以注意比较。

例如定义如下两个类Base和Derive:

class  Base
{
private:
    int x;
public:
    virtual void mf1() = 0;
    virtual void mf1(int);
    virtual void mf2();
    void mf3();
    void mf3(double);
};

class Derive:public  Base
{
public:
    virtual void mf1();
    void mf3();
    void mf4();
};
在使用这两个类的时候,对于变量和函数的查找根据上面说的规则进行,如果在函数中有如下代码:

Derive d;
int x;
...
d.mf1();//call mf1() in Derive
d.mf1(x);//error in Derive,the function mf1(int) in the base class if hidden
d.mf2();//ok call Base::mf2()
d.mf3();//ok call Derive::mf3()
d.mf3(x)//error in Derive,no function mf3(int),mf3(int) in Base is hidden
在查找的过程中,只对名称和参数进行比较,对于类型(如virtual)不进行比较。如果想在派生类的成员函数中使用被隐藏的基类函数,可以使用using声明或者是使用转交函数,即在派生类函数中使用Base::mf1(int)这样形式的代码调用基类的成员函数。

### BERT 和 GPT-2 的差异及应用场景 #### 差异分析 BERT 和 GPT-2 是两种不同的预训练语言模型,它们的核心区别在于架构设计、训练目标以及上下文理解方式。 1. **架构与训练方法** - BERT 使用的是基于 Transformer 的双向编码器结构,在预训练阶段通过 Masked Language Model (MLM) 实现了对输入序列的双向建模能力[^1]。这种机制允许 BERT 同时利用左侧和右侧的信息来预测被遮掩的词。 - GPT-2 则采用单向解码器结构,属于自回归模型,仅能从前向后依次生成单词。它依赖于因果注意力建立左到右的语言表示[^2]。 2. **参数规模与数据量** - 虽然具体版本可能有所不同,但通常情况下 GPT-2 参数数量远超原始版 BERT,并且其训练语料库也更加庞大复杂多样。这使得 GPT-2 更擅长处理开放域对话生成等任务。 3. **微调灵活性** - 对于某些特定类型的自然语言处理问题(如问答系统),由于具备完整的上下文感知功能,经过适当调整后的 BERT 可能达到更优的效果;而对于文本创作或者摘要生成等领域,则因为强大的连续性保持能力和风格模仿技巧而让 GPT 表现出色。 #### 应用场景对比 以下是两者典型的应用领域: | 场景 | 描述 | |-------------------|-----------------------------------------------------------------------------------------| | 文本分类 | 无论是情感极性判断还是主题类别划分,都可以很好地应用这两个框架完成相应工作。不过一般而言,对于较短片段的情感识别任务来说,BERT 往往表现得更好一点 。 | | 命名实体识别 | 鉴于命名实体往往需要考虑周围词语共同作用关系才能准确定位边界范围等问题特性 ,因此具有全局视野特性的 BERT 成为了首选方案之一 。 | | 开放式问答 | 当面对那些没有固定答案模式可循的新颖提问形式时,凭借强大创造力支持下的自由发挥空间较大的特点决定了此时更适合选用像 GPT 这样的工具来进行尝试解答 . | ```python # 示例代码展示如何加载并使用 HuggingFace Transformers 提供的预训练模型进行推理操作 from transformers import BertTokenizer, TFBertForSequenceClassification import tensorflow as tf tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = TFBertForSequenceClassification.from_pretrained('bert-base-uncased') inputs = tokenizer("Hello world!", return_tensors="tf") outputs = model(inputs) print(outputs.logits.numpy()) ``` 上述脚本演示了怎样借助 Python 编程环境快速上手运行一个简单的句子分类案例流程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值