博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第六章 6.6.1节练习 & 6.7节练习
阅读量:2421 次
发布时间:2019-05-10

本文共 2951 字,大约阅读时间需要 9 分钟。

练习6.52

已知有如下声明,

void manip(int, int);

double dobj;

请指出下列调用中每个类型转换的等级(参见6.6.1节,第219页)

(a) manip('a', 'z');

(b) manip(55.4, dobj);

解答:

(a) 5(字符字面转char) ->3(char转int)

(b) 5(double转int)

练习6.53

说明下列每组声明中的第二条语句会产生什么影响,并指出哪些不合法(如果有的话)

(a)

int calc(int&, int&);

int calc(const int&, const int&);

(b)

int calc(char*, char*);

int calc(const char*, const char*);

(c)

int calc(char*, char*);

int calc(char* const, char* const);

解答:

(a)(b)都是合法的。(a)的第二句是作用于常量引用,(b)的第二句是作用于常量的指针

(c)是非法的,这两句声明重复声明了int calc(char*, char*);

(c)在作为声明时,是合法的。但当两个声明都有各自的实现,则会出现重定义的情况。

测试代码:

#include 
int calc(char*, char*){ return 1;}int calc(char* const, char* const){ return 2;}int main(){ std::cout << calc("a", "b") << std::endl;}
g++(gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) )的编译结果

~$ g++ test.cc test.cc: In function ‘int calc(char*, char*)’:test.cc:6:5: error: redefinition of ‘int calc(char*, char*)’ int calc(char* const, char* const){     ^test.cc:3:5: note: ‘int calc(char*, char*)’ previously defined here int calc(char*, char*){     ^test.cc: In function ‘int main()’:test.cc:11:29: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]   std::cout << calc("a", "b") << std::endl;                             ^test.cc:11:29: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
clang++(clang version 3.8.0-2ubuntu4)的编译结果:

:~$ clang++ test.cc test.cc:6:5: error: redefinition of 'calc'int calc(char* const, char* const){    ^test.cc:3:5: note: previous definition is hereint calc(char*, char*){    ^test.cc:11:21: warning: conversion from string literal to 'char *' is deprecated      [-Wc++11-compat-deprecated-writable-strings]  std::cout << calc("a", "b") << std::endl;                    ^test.cc:11:26: warning: conversion from string literal to 'char *' is deprecated      [-Wc++11-compat-deprecated-writable-strings]  std::cout << calc("a", "b") << std::endl;                         ^2 warnings and 1 error generated.

vs2017 

Visual C++ 2017   00369-60000-00001-AA792

Microsoft Visual C++ 2017

cpp(7): error C2084: 函数“int calc(char *,char *)”已有主体cpp(4): note: 参见“calc”的前一个定义

练习6.54

编写函数的声明,令其接受两个int形参并且返回类型也是int;然后声明一个vector对象,令其元素是指向该函数的指针。

解答:

int fun(int, int);

vector<int(*)(int, int)> funvec;

练习6.55

编写4个函数,分别对两个int值执行加减乘除运算;在上一题创建的vector对象中保存指向这些函数的额指针。

解答:

int add(int, int);int sub(int, int);int mul(int, int);int div(int, int);vector
funvec{ add, sub, mul, div };
练习6.56

调用上述vector对象中的每个元素并输出其结果。

解答;

#include 
#include
using namespace std;int Add(int a, int b){ return a + b; }int Sub(int a, int b){ return a - b; }int Mul(int a, int b){ return a*b; }int Div(int a, int b){ if (!b)return 0; return a / b; }int main(){ int a = 10, b = 100; vector
funvec{ Add, Sub, Mul, Div }; for (vector
::size_type i = 0; i != funvec.size(); ++i){ cout << funvec.at(i)(a, b) << endl; } for (auto i : funvec){ cout << i(a, b) << endl; }}

转载地址:http://swqlb.baihongyu.com/

你可能感兴趣的文章
2018年,你所不知道的Jira!
查看>>
2017年,阿里巴巴开源的那些事
查看>>
这有一节价值30美元的AI免费课等您领取
查看>>
推动边缘计算的七项核心技术
查看>>
边缘计算精华问答 | 边缘计算需要IaaS、PaaS、SaaS等服务能力吗?
查看>>
Spark精华问答 | Spark 会替代Hadoop 吗?
查看>>
豆瓣已玩烂,来爬点有逼格的 ——IMDB 电影提升你的品位
查看>>
一部刷爆朋友圈的5G短片,看完才知道5G多暖多重要!
查看>>
要闻君说:华云数据“豪气”收购超融合厂商Maxta;VMware有意“携手”微软Azure云;亚马逊获3亿美元云计算合同...
查看>>
SDN精华问答 | SDN可以做什么?
查看>>
云评测 | 开发者最有用的开源云监控工具有哪些呢? 这7款神器总有一款适合你!...
查看>>
小团队的微服务之路
查看>>
K8S精华问答 | Kubernetes集群不能正常工作,难道是防火墙问题?
查看>>
5G精华问答 | 什么是5G?5G与LTE有什么关系?
查看>>
虎牙直播在微服务改造方面的实践和总结
查看>>
微服务精华问答 | 在使用微服务架构时,您面临哪些挑战?
查看>>
Kubernetes 调度器实现初探
查看>>
边缘计算精华问答 | 边缘计算有哪些应用场景?
查看>>
要闻君说:Synergy Research Group首发云基础设施数据,腾讯云v5一把;京东物流发力5G;厉害!阿里挖走贾扬清...
查看>>
要闻君说:重磅!阿里巴巴发布了机器学习平台PAI 3.0版本;厉害!三星推出了业界首款HBM2E内存;Google也做云游戏平台...
查看>>