C++ Primer 5th笔记(chap 18 大型程序工具) 类、 命名空间与作用域

2024-03-28 08:38

本文主要是介绍C++ Primer 5th笔记(chap 18 大型程序工具) 类、 命名空间与作用域,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 命名空间内部名字的查找规则

由内向外依次查找每个外层作用域。

  • 外层作用域也可能是一个或多个嵌套的命名空间, 直到最外层的全局命名空间查找过程终止。

  • 只有位于开放的块中且在使用点之前声明的名字才被考虑

 namespace A {int i;namespace B {int i;        // hides A::i within Bint j;int f1(){int j;    // j is local to f1 and hides A::B::jreturn i; // returns B::i}} // namespace B is closed and names in it are no longer visibleint f2() {return j;     // error: j is not defined}int j = i;      // initialized from A::i}

1.1 命名空间中的类的查找规则

当成员函数使用某个名字时, 首先在该成员中进行查找, 然后在类中查找( 包括基类), 接着在外层作用域中查找,这时一个或几个外层作用域可能就是命名空间

namespace A {int i;int k;class C1 {public:C1(): i(0), j(0) { }   // ok: initializes C1::i and C1::jint f1(){return k;        // returns A::k}int f2(){return h;        // error: h is not defined}int f3();private:int i;                // hides A::i within C1int j;};int h = i;               // initialized from A::i
}
// member f3 is defined outside class C1 and outside namespace A
int A::C1::f3()
{return h;               // ok: returns A::h
}

2. 实参相关的查找与类类型形参

隐藏规则:直接访问输出运算符。

当我们给函数传递一个类类型的对象时, 除了在常规的作用域查找外,还会查找实参类所属的命名空间。 这一例外对于传递类的引用或指针的调用同样有效

eg.

std::string s;
std::cin » s;operator>> (std::cin, s);

或者使用函数调用的形式以把命名空间的信息包含进来:

std::operator»(std::cin, s) ; / / 正确: 显式地使用 std::>>

2.1 查找与 std::move 和 std::forward

如果在应用程序中定义了一个标准库中已有的名字, 则将出现以下两种情况中的一种:

  • 根据一般的重载规则确定某次调用应该执行函数的哪个版本
  • 应用程序根本就不会执行函数的标准库版本

2.2 友元声明与实参相关的查找

namespace A {class C {// 两个友元, 在友元声明之外没有其他的声明// 这些函数隐式地成为命名空间 A 的成员// 除非另有声明, 否则不会被找到friend void f(const C& ); // 才艮据实参相关的查找规贝可以被找到friend void f2();}
}

当类声明了一个友元时, 该友元声明并没有使得友元本身可见

一个另外的未声明的类或函数如果第一次出现在友元声明中, 则我们认为它是最近的外层命名空间的成员

int main ( )
{A::C cobj;f(cobj);f2();//正确: 通过在 A::C 中的友元声明找到 A::f//错误: A::f 2 没有被声明
}

这篇关于C++ Primer 5th笔记(chap 18 大型程序工具) 类、 命名空间与作用域的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/855074

相关文章

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学