【No.11 默认实参的匹配】
==【注意】==
程序语言只是我们与计算机交流并让计算机实现我们创造性思想的工具,可以并鼓励深入掌握一门语言,但千万别沉迷于钻某种语言的牛角尖,一定要把握好二者间的度
本帖属不定时连载贴,以试卷的形式提出一个比较基础的问题供大家思考讨论,问题的解析将在下一更新贴中一并给出,这样做是希望还不清楚问题的朋友有自己思考和讨论的时间,希望大家能从这些帖子中有所收获。
贴中问题属我在学习C\C++过程中遇到的一些语法或者比较隐晦的程序问题,其中有自己的总结,也不乏网络上搜索到的经典解析,在此分享给大家,希望能起到抛砖引玉的作用
我已认真检查过自己的帖子,但难免有疏忽,如大家在阅读过程中仍发现有问题,请及时通知,我会及时更正,以免误导大家,万分感谢^_^
[问题11]
请写出以下代码中能够通过编译的行的结果,并指出会发生编译错误的行并说明原因:
代码:
#include<iostream>
using namespace std;
void defaultArg(int a=24, int b=48, char c='c')
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
cout<<endl;
}
int main(int argc, char **argv)
{
defaultArg();
defaultArg(1);
defaultArg(1,2);
defaultArg( , ,'A');
defaultArg('c');
return EXIT_SUCCESS;
}
问题浅析
代码:
/***
* 解决此题的关键在于理解C++类成员变量
* 的初始化顺序。
* C++类成员变量的初始化顺序并不是由构
* 造函数的初始化顺序决定,而是由变量在
* 类中的声明次序所决定
***************************************/
#include<iostream>
using namespace std;
class Test
{
public:
//注意,这两个构造函数都试图让你误以为
//首先初始化变量_j,然后才用已经初始化的
//_j去初始化变量_i
//而实际上,由于_i在类中首先被声明,因此
//初始化时一定是先初始化_i,然后才初始化j
//首先初始化_i=0,然后初始化_j=0
Test(void):_j(0), _i(0){}
//首先用_j初始化_i,但是此时_j并没有被初始化
//因此_j是一个随机值(而非k),所以_i被初始化
//为一个随机值,然后初始化_j=k
Test(int k):_j(k), _i(_j){}
void print(void)
{
cout<<"i = "<<_i<<endl
<<"j = "<<_j<<endl;
}
private:
int _i;
int _j;
};
int main(int argc, char **argv)
{
Test t(20);
t.print(); //由于_i是随机值xxx,所以输出为
//i = xxx
//j = 20
return EXIT_SUCCESS;
}
【No.11 默认实参的匹配】相关推荐
- C++知识点9——函数重载,默认实参,内联函数
函数重载 同一作用域内,函数名相同但是形参列表不同的函数,为重载函数 下面两个函数就是重载函数,编译时会根据形参列表将这两个函数编译成不同的函数,在调用时传入对应的参数就可以调用不同的重载函数 voi ...
- JavaScript中对于函数的形参实参个数匹配是如何做的?
函数形参实参个数匹配 <!DOCTYPE html> <html lang="en"><head><meta charset=" ...
- Android 11 默认打开开发者选项
Android 11 默认打开开发者选项 修改部分 packages/apps/Settings/src/com/android/settings/SettingActivity.java 在 doU ...
- c++ 函数 -函数重载 -特殊用途的语言特性(默认实参,内联函数 ,constexpr ,assert,NDEBUG)
c++ 函数 -函数重载 -特殊用途的语言特性 文章目录 c++ 函数 -函数重载 -特殊用途的语言特性 函数重载 定义: 重载和const形参 const_cast 和重载 const_cast 重 ...
- 219页习题7.26用字符‘s’为默认实参写函数make_plural,并输出failure和success的单数和复数形式
//为了方便,要包含的文件会不同,但我没有删 #include <iostream> #include <string> #include <vector> #in ...
- rk3568 android 11 默认壁纸
去除默认壁纸 device/rockchip/rk356x/overlay/frameworks/base/core/res/res/drawable-nodpi/default_wallpaper. ...
- 常见错误1 定义形参和实参不匹配错误
#include <iostream> using namespace std; void maopao(int *arr,int size); void swap(int &a, ...
- Windows 11默认系统壁纸4K原图提前出炉
Windows 11 Wallpapers Pack:微软平台的build 21996,现在被称为Windows 11,被泄露到网络上,这个build包含了系统界面和新图形的显着视觉变化. 本文来自就 ...
- C++知识点57——类模板(2、类模板的局部特化与默认模板实参)
接上一篇文章https://blog.csdn.net/Master_Cui/article/details/111824064 四.类模板的局部特化 类模板可以被局部特化(只指定部分模板参数而不指定 ...
- pythoning——11、正则匹配
一简介: 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言, (在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被 编译成一系列的字节码,然后由用 ...
最新文章
- Kernel i2c gpio spi pinctrl platform 分析讲解 (未完待续)
- Docker之HelloWorld篇
- 制定备份策略的指导方向思考
- Beetlex.Redis之Stream功能详解
- Sqlite3中replace语句用法详解
- 农村金融大变革,央行要给农民发钱了!
- 【工具】 原版完美激活 Flash builder 4.7 【非破解激活】
- [转载] comma.ai自动驾驶代码浅析及实践
- easybcd添加或删除启动选项
- 项目开发:网上书店(详细的开发流程记录)----注册登录功能,通过邮件验证
- 计算机程序考试试题及答案,计算机程序员考试试题及答案.doc
- 若干tif文件转换成pdf
- 服务器的cd驱动器怎么修改盘符,更改dvd驱动器盘符,cd驱动器盘符改
- 自主招生计算机专业自我介绍,自主招生自我介绍范文【自主招生个人论述范文】...
- 3.5 基本属性测试
- cfg80211 subsystem中的cfg80211_ops
- 苹果手机 生成html文件,苹果手机这个功能太厉害了,1秒就能将纸质文档转换为Word...
- 马士兵 java 学习笔记_马士兵java教程笔记1
- 怎样高效的使用代理IP
- 可以发布外链的平台有哪些
热门文章
- mysql 总分区表限制_MySQL分区表的局限和限制详解
- php cgi启动报错,php编译安装,cgi启动,以及memcache扩展编译安装.
- java socket 简书_Java之Socket编程入门篇
- 帆软动态显示参数据控件(invisible,visible)
- aliy 数据库连接池加密_Druid数据库连接池 实现数据库账号密码加密
- Selenium爬虫 -- 用户动态数据爬取
- 爬虫封号解决 -- Win10系统如何修改网卡的物理地址(MAC)
- 在线php网站扫描,php实现在线端口扫描实例代码_PHP教程
- java递归求和 1 n_Java递归求和1+2+3+...+n实例详解
- Java线程池ThreadPoolExecutor使用与解析