Statements

A break statements terminate the nearest wile, do while, for or switch statement. A break affect only the nearest enclosing loop or switch.

As any block, variables declared inside a try block are inaccessible outsite the block - in particular, they are not accessible to the catch clauses.

Exception.

A try block maigh call a function that contains a try which calls another funciton with its own try and so on. The search for a hander reverses the call chain. If no appropriate catch is found, execution is transfered to a library function name terminate. The terminate will garantee to stop further execution of th problem.

If there are no try blocks, they can be no handlers. If a program no try blocks and an exception occurs, then terminate is called and program is exited.

Programs that properly "clean up" during execution handling are saied to be "exception safe".

Functions

Parameters and Arguments

Arguments are the initilizers for a function's parameters.

Local Objects

In C++, names have scopes, and objects have lifetimes

  • The scope of a name is the part of the program's text in which that name is visible.
  • The lifetime of an object is the time during the program's execution that the object exists.

Parameters and variables defined inside a function body are refered to as local variables. They are "local" to that function and hide declaration of the same name made on outer scope.

Obejcts defined outside any functions exist through the program's execution. Such object are created then the program starts and not destroyed until the program ends

The lifetime of varibles depends on how it is defined.

Automatic object. Objects that exist only when a block is execution are known as automatic objects.

local static object. Each local static object is initilized before the first time execution pass through the object's definition. Local static objects are not destroyed when a funciton ends; they are destroyed when the program terminated.

size_t count_calls(){
static size_t ctr = ; // value will persist across calss
ctr++;
return ctr;
}
int main(){
for (size_t i = ; i != ; i++){
cout << count_calls() << endl;
}
}

This program will print the number from 1 through 10 inclusive.

Function declartions are also known as the function prototype.

Recall that variables are declared in haeder files and defined in source file. Function should be declared in header files and defined in source file.

The header that declares a funciton should be included in that source file tha defines that function.

Argument Passing

Parameter initialization works the same way as variable initialization.

If the parameter is a reference then the parameter is bound to its argument. Otherwise, the argument's value is copied.

When aprameter is a reference, we say that its correspondency argument is "passed by reference", or that function is "called by referenced". As with any other reference, a reference paramter is an alisa for the object to which it is bound.

When the argument value is copied. the parametr and argument are independent object. We say such arguments are "passed by value", or the function is "called by value".

When we initiliaze a non-reference type variable or parameter, the value of the initializer is copied.

Pointers behave like any other non-reference type. When we copy a pointer, the value of the pointer is copied. After the copy, the two pointers are distinct, but pointing to the same object.

void reset(int *ip){
*ip = ; // change the value of the object to which ip points
ip = ; // change the local pointer; the argument is unchanged.
}

Usage:

int i = ;
reset(&i); // change i, but not the address of i

Programmers accustomed to programming in C often use pointer paramters to access objects outside a function. In C++, programmers generally use reference parameters instead.

Recall that operations on a reference are actully operations on the object to which the reference refers

void reset(int &i){    // i is just another name for the object passed to reset
i = ;       // change the value of the objet to which i refers
}

When we call this version of reset, pass an object directly, no need to pass its address.

int j = ;
reset(j); // passed by reference, the value on j is changed

Reference parameter that are not changed inside a function should be references to const.

Never return a reference or pointer to a local object.

When a function completes, its storage is free. After a function terminates, references to local object refer to memory that is no long valid.

// disaster: this function returns a reference to a local object
const string &mapip(){
string ret;
if(!ret.empty()){
return ret; // WRONG: return a reference to a local object
}else{
return "Empty"; // WRONG: "Empty" is a local object
}
}

References returns are lvalues

Calls to function that return references are lvalu. Other return types is rvalue.

char &get_val(string &str, string::size_type ix){
return str[it];
}
int main(){
string s("a value");
get_value(s, ) = 'A'; // change s[0] to A
return ;
}

Overload Functions

Functions that have the same name but different parameter lists and that appear in the same scope are overload.

Default Arguments

sz wd = ;
char def = ' ';
char ht(); string screen(sz = ht(), sz = wd, char = def); void f2(){
sz wd = ; // hide the definition of wd, but not change the default
def = '*'; // change the default
window = screen(); // call screen(ht(), 80, '*')
}

Reference:

C++ Primer, Fifth Edition, chapter 6 Functions

[C++] Fucntions的更多相关文章

  1. 【代码笔记】iOS-钢琴小游戏

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> //加入头文件 #import <AudioTool ...

  2. wordpress工作原理

    WP初始化的过程:当你输入<yourlink>/wordpress对wordpress进行初始化时,wordpress默认会找根目录下的index.php页面,看一下index.php页面 ...

  3. Objects and Data Structures

    Date Abstraction Hiding implementation is not just a matter of putting a layer of fucntions between ...

  4. 黄聪:wordpress工作原理

    WP初始化的过程:当你输入<yourlink>/wordpress对wordpress进行初始化时,wordpress默认会找根目录下的index.php页面,看一下index.php页面 ...

  5. C++11 之 &quot; = delete &quot;

    1  缺省函数 设计一个类,没有成员函数 (member function),只有成员数据 (member data) class DataOnly { private: std::string st ...

  6. C++11 之 " = delete "

    1  缺省函数 设计一个类,没有成员函数 (member function),只有成员数据 (member data) class DataOnly { private: std::string st ...

  7. Python 2.7的字典实现简化版(C语言)

    这是一个能自动调整大小的哈希字典,外部接口实现了下列功能. 1.字典级别: 创建字典 dict_new 归零字典 dict_clear 2.键值级别: 查找 dict_search 强制查找 dict ...

  8. R-CNN,SPP-NET, Fast-R-CNN,Faster-R-CNN, YOLO, SSD, R-FCN系列深度学习检测方法梳理

    1. R-CNN:Rich feature hierarchies for accurate object detection and semantic segmentation 技术路线:selec ...

  9. faster rcnn讲解很细

    https://blog.csdn.net/bailufeiyan/article/details/50749694 https://www.cnblogs.com/dudumiaomiao/p/65 ...

随机推荐

  1. 关于css属性calc对于ie的态度

    做的一个项目,布局的时候用到了max-height:calc(100% - 15px);在谷歌.火狐浏览器,进行下拉的时候,它的父元素会出现垂直滚动条,但是在IE就不可以. 然后在网上找了找,说在它的 ...

  2. tomcat安装、配置相关的几个点

    Connector port="8080"HTTP协议的默认端口号:8080 FTP协议的默认端口号:21 1.tomcat的安装目录要与Java jre的安装目录一致. bin: ...

  3. thinkphp 5.1/tp5.1 route路由bug

    tp5.1下面RuleItem类中,match方法. 如果同一个控制器下面,写了两个路由,后一个路由比包含前一个路由,则访问后一个路由地址的时候,会跳转到前面定义的那个路由

  4. centos7.3 vsftpd 多用户配置

    1. 安装vsftpd及pam认证服务软件 yum install vsftpd* -y yum install pam* libdb-utils libdb* --skip-broken -y #设 ...

  5. elasticsearch按范围聚合

    范围聚合适用于对数据按照指定范围进行分类聚合的应用场景,from和to表示范围起始值的半开半闭区间(包含from值不包含to值),key表示别名 如 {:key=>"2h", ...

  6. linux线程篇 (一) 线程的基本概念

    --进程 一个正在执行的程序,资源分配的最小单位 进程中的事情需要按照一定顺序区执行的,但是如何在一个进程中让一些事情同时发生呢?子进程存在缺陷 --引进多线程 --线程:有时又称轻量级进程,程序执行 ...

  7. Verilog_Day3

    内容为书中第5章 条件语句 条件语句必须在过程块语句中使用.所谓过程块语句是指由 initial 和 always 语句引导的执行语句集合.除这两种块语句引导的begin_end块中可以编写条件语句外 ...

  8. js polyfill , to developing the cross browser js

    https://github.com/paulmillr/console-polyfill https://github.com/Modernizr/Modernizr/wiki/HTML5-Cros ...

  9. 20145202马超《java》实验5

    两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面 ...

  10. 20145209刘一阳《网络对抗》Exp6信息搜集与漏洞扫描

    20145209刘一阳<网络对抗>Exp6信息搜集与漏洞扫描 实践内容 信息搜集和漏洞扫描 信息搜集 whois查询 用whois查询博客园网站的域名注册信息可以得到注册人的名字.城市等信 ...