1. 表达式只计算,抛弃计算结果;

2. 空语句什么也不做;

3.switch case语句漏写break,将会从匹配到的情况开始执行,直到语句结束

int main()
{
int i = ;
i + ; //表达式
; //空语句
while(cin >> i && i != )
; //空语句
switch(i){
case :
cout << "" << endl;
case : //开始执行
cout << "" << endl;
case :
cout << "" << endl;
default:
cout << "" << endl;//执行结束
}
return ;
}

4. 形参、实参、局部变量、静态局部变量

所谓形参就是占位之用,在函数开始时申请空间,并由传入实参进行实例化(也可称拷贝构造)。一般是局部的,即只能在函数体内可见。

实参用来实例化/初始化形参

局部变量的作用域是函数体或者语句内部,但是加上static修饰就变成了静态局部变量,它作用域还是该函数体,但生命期延长到了程序终止。

int countCalls(int a, int b)
{
static int calls = ;//静态局部变量
return ++calls;
} int main()
{
for(int i=; i<; i++)
cout << countCalls(, ) << endl;
//cout << calls << endl;//无法访问
return ;
}

5. 函数返回值,还是发生了拷贝,即用函数体内的某变量初始化函数调用点的某临时量。

6. 不要返回局部变量的引用或指针,返回后就销毁了,没地儿去找了。

7. 引用返回左值,其他类型返回的是右值。

8. 内联函数适用于优化规模较小、流程直接、频繁调用的函数。

9. 有趣的返回错误信息的宏(静态变量)

void trouble(int m)
{
if(m == )
{
cout << "Error : " << __FILE__;
cout << " in function " << __func__;
cout << " at line " << __LINE__;
cout << " complie on " << __DATE__;
cout << " at " << __TIME__;
}
}

10.函数重载二义性

(1)无参函数VS有参有默认值,歧义

int get(){
return a;
}
int get(int a = ){
return a;
}
//调用get()

(2)传值VS传引用,歧义

int get(int a){
return a;
}
int get(int &a){
return a;
}
//int m = 10;
//调用get(m)

(3)参数存在隐式类型转换,歧义

int get(int m){
return m;
} long get(long m){
return m;
}
//double m = 10.123
//调用get(m)

参考资料

【1】https://blog.csdn.net/chenxiaohua/article/details/2128899 (有点问题)

【2】https://blog.csdn.net/loving_forever_/article/details/51472127 (有点问题)

C++ 语句函数再探的更多相关文章

  1. 再探jQuery

    再探jQuery 前言:在使用jQuery的时候发现一些知识点记得并不牢固,因此希望通过总结知识点加深对jQuery的应用,也希望和各位博友共同分享. jQuery是一个JavaScript库,它极大 ...

  2. [老老实实学WCF] 第五篇 再探通信--ClientBase

    老老实实学WCF 第五篇 再探通信--ClientBase 在上一篇中,我们抛开了服务引用和元数据交换,在客户端中手动添加了元数据代码,并利用通道工厂ChannelFactory<>类创 ...

  3. 【再探backbone 02】集合-Collection

    前言 昨天我们一起学习了backbone的model,我个人对backbone的熟悉程度提高了,但是也发现一个严重的问题!!! 我平时压根没有用到model这块的东西,事实上我只用到了view,所以昨 ...

  4. ViewPager+Fragment再探:和TAB滑动条一起三者结合

    Fragment前篇: <Android Fragment初探:静态Fragment组成Activity> ViewPager前篇: <Android ViewPager初探:让页面 ...

  5. 再探java基础——break和continue的用法

    再探java基础——break和continue的用法 break break可用于循环和switch...case...语句中. 用于switch...case中: 执行完满足case条件的内容内后 ...

  6. python再探

    python是一门强大的高级编程语言,之前的文章中介绍了python的基础知识,接下来会介绍一些python更为高级的知识. 面向对象编程 基本知识 一般编程思想分为面向过程和面向对象,前者的基本单元 ...

  7. 深入出不来nodejs源码-内置模块引入再探

    我发现每次细看源码都能发现我之前写的一些东西是错误的,去改掉吧,又很不协调,不改吧,看着又脑阔疼…… 所以,这一节再探,是对之前一些说法的纠正,另外再缝缝补补一些新的内容. 错误在哪呢?在之前的初探中 ...

  8. 再探Redux Middleware

    前言 在初步了解Redux中间件演变过程之后,继续研究Redux如何将中间件结合.上次将中间件与redux硬结合在一起确实有些难看,现在就一起看看Redux如何加持中间件. 中间件执行过程 希望借助图 ...

  9. c++再探string之eager-copy、COW和SSO方案

    在牛客网上看到一题字符串拷贝相关的题目,深入挖掘了下才发现原来C++中string的实现还是有好几种优化方法的. 原始题目是这样的: 关于代码输出正确的结果是()(Linux g++ 环境下编译运行) ...

随机推荐

  1. osg fbx模型中任何一个节点染色(着色)

    void setNodeStateset(osg::Node *nodeParam) { osg::ref_ptr<osg::StateSet> stateset1 = nodeParam ...

  2. ubuntu server 18.04 有线网卡默认关闭,需要手工配置才能使用的方法

    1.安装完ubuntu server 18.04 后,笔记本电脑的有线网卡已经识别了,但是没有ip, 并且插上网线后端口灯不亮. 解决方法: 第一步.配置端口链路状态为 up # ip link se ...

  3. CentOS7下搭建Tomcat服务器

    Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选.Tomcat 和 IIS ...

  4. C++ - 第一个程序

    代码: #include <iostream> using namespace std; int main() { cout << "hello!" < ...

  5. nginx conf 文件

    server { listen ; server_name local.light.com; index index.html index.htm index.php; root /home/wwwr ...

  6. python迭代器、生成器、装饰器之迭代器

    迭代是Python最强大的功能之一,是访问集合元素的一种方式. 一般分为可迭代对象,迭代器,可迭代对象不一定是迭代器,但迭代器一定是可迭代对象 1.可以直接作用于for循环的数据类型 第一类:集合数据 ...

  7. 第十一章 缓存机制——《跟我学Shiro》

    转发地址:https://www.iteye.com/blog/jinnianshilongnian-2029217 跟我学Shiro  目录贴:跟我学Shiro目录贴 Shiro提供了类似于Spri ...

  8. TCP Socket + UDP Socket

    小例子:http://soft.yesky.com/238/2035738.shtml 服务器程序: #include <iostream> #include <WinSock2.h ...

  9. utf8 gbk 互转

    public static function utf8_to_gbk($utfstr) { return iconv("utf-8", "gbk//IGNORE" ...

  10. XMemcached的基本使用

    XMemcached是memcached的一个java客户端,基于java nio,支持memcached的所有协议.本文简要介绍XMemcached的基本使用. 一.添加依赖 <depende ...