18.2节练习
来源:互联网 发布:淘宝全球购有没有假货 编辑:程序博客网 时间:2024/06/05 16:30
练习18.12 //。。。
练习18.13 什么时候应该使用未命名的命名空间?
在某个给定的文件内使用,但是不跨越多个文件。
练习18.14 假设下面的operator*声明的是嵌套的命名空间mathLib::MatrixLib的一个成员:
namespace mathLib {namespace MatrixLib {class matrix{};matrix operator*(const matrix&, const matrix&);//...}}请问你应该如何在全局作用域中声明该运算符。
mathLib::MatrixLib::matrix mathLIb::MatrixLib::operator*(const matrix&, const matrix&);
练习18.15 说明using指示和using声明的区别。
一条using声明语句一次只引入命名空间的一个成员。
using指示使得某个特定的命名空间中所有的名字都可见,这样我们就无须再为它们添加任何前缀限定符,可不能出现在类的作用域中。
练习18.16 && 18.17假定在下面的代码中标记为“位置1”的地方是对于命名空间Exercise中所有成员的using声明,请解释代码的含义。如果这些using声明出现在“位置2”又会怎样呢?将using声明编程using指示,重新回答之前的问题。并检验你的回答。
#include <iostream>using namespace std;namespace Exercise {int ivar = 0;double dvar = 0.0;const int limit = 1000;}int ivar = 0;//using Exercise::ivar; // 重复声明了ivar,编译不通过。 using Exercise::dvar;using Exercise::limit;void mainp(){double dvar = 3.14146;cout << "dvar = " << dvar << endl;int iobj = limit + 1;cout << "iobj = " << iobj << endl;++ivar;cout << "ivar = " << ivar << endl;++::ivar;cout << "::ivar = " << ::ivar << endl;}int main(){mainp();}
#include <iostream>using namespace std;namespace Exercise {int ivar = 7;double dvar = 0.0;const int limit = 1000;}int ivar = 0;void mainp(){using Exercise::ivar;//using Exercise::dvar;//重复声明using Exercise::limit;double dvar = 3.14146;cout << "dvar = " << dvar << endl;int iobj = limit + 1;cout << "iobj = " << iobj << endl;++ivar;//ivar of Exercisecout << "ivar = " << ivar << endl;++::ivar;//ivar of mainpcout << "::ivar = " << ::ivar << endl;}int main(){mainp();}
#include <iostream>using namespace std;namespace Exercise {int ivar = 0;double dvar = 0.0;const int limit = 1000;}int ivar = 0;using namespace Exercise;//错误和“位置1”的using声明是一样的,ivar不明确。void mainp(){double dvar = 3.14146;cout << "dvar = " << dvar << endl;int iobj = limit + 1;cout << "iobj = " << iobj << endl;++ivar;cout << "ivar = " << ivar << endl;++::ivar;cout << "::ivar = " << ::ivar << endl;}int main(){mainp();}
练习18.18 已知有下面的swap的典型定义(13.3节,第457页),当mem1是一个string时程序使用swap的哪个版本?如果mem1是int呢?说明在这两种情况下的查找过程。
void swap(T v1, T v2){using std::swap;swap(v1.mem1, v2.mem1);//交换类型T的其他成员}string的情况:
std::swap — 使用string类的swap
int的情况:
std::swap — 使用实例化int类的swap
练习18.19 如果对swap的调用形如std::swap(v1.mem1, v2.mem1)将发生什么情况?
swap函数限定是string类中的版本。int类型的也能实例化。
练习18.20 在下面的代码中,确定哪个函数与compute调用匹配。列出所有候选函数和可行函数,对于每个可行函数的实参与形参匹配过程来说,发生了哪种类型转换?
namespace primerLib {void compute(); 1void compute(const void *); 2}using primerLib::compute; void compute(int); 3void compute(double, double = 3.4); 4void compute(char*, char *= 0); 5void f(){compute(0);}候选函数和可行函数:2 3 4 5
最佳匹配:3
如果将using声明置于f函数中compute的调用点之前将发生什么情况?重新回答之前的那些问题。
候选函数和可行函数:3 4 5 对于f(),2不可见
最佳匹配:3
- 18.2节练习
- 第十八章 18.2.1节练习
- 第十八章 18.2.2节练习
- 第十八章 18.2.3节练习
- 第十八章 18.2.4节练习
- C++ Primer 练习答案 1.2节练习
- C++ Primer 练习答案 1.4节练习
- 第一章 1.1节练习
- 第一章 1.2节练习
- 第一章 1.3节练习
- 10.1节练习
- 10.2.1节练习
- 10.2.2节练习
- 10.2.3节练习
- 10.3.1节练习
- 10.3.2 节练习
- 10.3.3节练习
- 10.3.4节练习
- Android 滑动标题导航栏
- 使用windows套接字进行网络编程
- Codevs 2370 小机房的树
- JUNIT实例教程
- poj_2774_Long Long Message
- 18.2节练习
- LCD 显示异常定位分析方法
- C#的抽象类和接口的区别,在什么时候使用才合适?
- Nested weights are bad for performance
- 《孟子》的雄辩
- php面试题
- Android程序开发意见反馈的实现
- MATLAB利用ApplicationCompiler创建独立的应用程序
- Linux 下面编译内核模块的 方法