zoukankan      html  css  js  c++  java
  • 【c++ primer读书笔记】【第6章】函数

    1.局部静态对象

    局部静态对象在对象定义语句时初始化,并且到程序终止才被销毁,在此期间,即使对象所在的函数结束执行也不会对它有影响。

    #include<iostream>
    #include<string>
    using namespace std;
    
    size_t count_calls(){
    	static size_t count=0;
    	return ++count;
    }
    int main(){
    	for(size_t i=0;i!=10;++i)
    		cout<<count_calls()<<" ";  //输出1到10
    	cout<<endl;
    	
    	system("pause");
    	return 0;
    }

    2.参数传递

    如果形参是引用类型,它将绑定到对应的实参上,否则,将实参的值拷贝后赋给形参。

    3.数组形参

    由于不允许拷贝数组,所以我们无法以值传递的方式使用数组参数,因为数组会转换成指针,所以当我们为函数传递一个数组时,实际传递的是指向数组首元素的指针。

    void print(const int*);
    void print(const int[]);
    void print(const int[10]);
    上面三个print函数是等价的,每个函数都有一个const int*类型的形参

    4.initializer_list形参

    initializer_list用于表示某种特定类型的值的数组,定义initializer_list对象时,必须说明列表中所含元素的类型。

    initializer_list<string> ls; // initializer_list的元素类型是string

    initializer_list对象中的元素永远是常量值。

    5.列表初始化返回值

    c++11线标准规定,函数可以返回花括号包围的列表。

    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    
    vector<string> process(){
    	return{ "aaa", "bbb" };
    }
    int main(){
    	vector<string> vec(process());
    	for (auto &c : vec)       //输出aaa,bbb,VS2013支持
    		cout << c << " ";
    	cout << endl;
    
        system("pause");
    	return 0;
    }
    

    6.返回数组指针

    返回数组指针的函数形式如下:

    int (*function(parameter_list))[dimension]
    
    具体例子:
    int (*func(int i))[10];

    说明:

    func(int i)表示调用func函数时需要一个int类型的实参

    (* func(int i))表示我们对函数调用的结果执行解引用操作

    (* func(int i))[10]表示解引用func的调用将得到一个大小是10的数组

    c++11新标准有另一种简化上述func声明的方法,称作尾指返回类型

    auto func(int i)-> int(*)[10]; //func接受一个int类型的实参,返回一个指针,该指针指向含有10个整数的数组

    7. 函数重载

    如果同一作用域内的几个函数名字相同但形参列表不同,我们称为重载函数。

    8.内联函数

    将函数指定为内联函数,就是将它在每个调用点上”内联地"展开。

    如:

    inline const string &shortString(const string &s1,const string &s2){
    	return s1.size()<=s2.size()?s1:s2;
    }
    调用
    cout<<shortString(s1,s2)<<endl;
    将在编译过程中展开成类似下面的形式
    cout<<(s1.size()<=s2.size()?s1:s2)<<endl;

    9.函数指针

    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    
    
    const string &shortString(const string &s1,const string &s2){
          return s1.size()<=s2.size()?s1:s2;
    }
    int main(){
        const string&(*pf)(const string &s1,const string &s2); //声明指向shortString函数的指针
        pf=shortString;             //将pf指向shortString函数
        cout<<pf("aa","bbb")<<endl; //调用shortString函数,输出aa
    
        system("pause");
        return 0;
    }
    

  • 相关阅读:
    redis在java项目中的使用
    Nginx+Tomcat搭建高性能负载均衡集群
    Redis 数据类型
    MySQL 索引概述
    Spring boot 中的WebMvcConfigurerAdapter、WebMvcConfigurationSupport与WebMvcConfigurer区别
    DAO与DTO名词解释
    FindBugs-IDEA插件的使用
    Map 中有 HashMap、TreeMap、HashTable、LinkedHashMap,首先简单说一下他们之间的区别:
    javax.el.PropertyNotFoundException:
    内省(introspector)------>JavaBean
  • 原文地址:https://www.cnblogs.com/ruan875417/p/4495576.html
Copyright © 2011-2022 走看看