• string类定义了一种char*到string的转换功能,这使得可以使用C-风格字符串来初始化string对象。
  • 类型为const引用的形参其中一个属性表明:假设实参的参数类型与引用参数不匹配,但可以转换为引用类型,程序将创建一个正确类型的临时变量,使用转换后的实参值来初始化它,然后传递一个指向该临时变量的引用。

    从上面两条属性我们得知: 如果形参类型为const string &,在调用函数时,使用的实参可以是string对象或者C-风格字符串,如用引号括起来的字符串字面量,以空字符结尾的char数组或指向char的指针变量。

  • 上面提到const引用为形参的属性,也就是说,如果引用的参数是const,则编译器在某些情况下会生成临时变量,比如下面这两种情况:
    1, 实参类型不正确,但可以转换为正确类型。
    2, 实参类型正确,但不是左值。
  • 下面我们来看代码实例。

     #include <iostream>
    #include <string> using namespace std; string version(string &a, const string &b); int main(void)
    {
    string input = "I love you.";
    cout << "input address: " << &input << endl;
    const char* b = "***";
    cout << "i b address: " << &b << endl; version(input, b); return ;
    } string version(string &a, const string &b)
    {
    using namespace std;
    cout << "a address: " << &a << endl;
    cout << "b address: " << &b << endl;
    return a;//没有这句会产生内存错误。返回引用。
    }
    /************************************
    * input address: 0x7ffe09a647f0
    * i b address: 0x7ffe09a647e8
    * a address: 0x7ffe09a647f0
    * b address: 0x7ffe09a64840
    * **********************************/

    其中,input是string对象,应用了string类定义了一种char*到string的转换功能,将字符串字面量转为string对象。b则是char*型,作为实参时函数会创建一个临时变量。看代码得知,b在main中的地址是:i b address: 0x7ffe09a647e8 ,而在version中的地址是:b address: 0x7ffe09a64840 。它们不一样,说明了函数却实是没有传递char *b的引用,而是临时变量。又看string类input,在main中和在version中的地址是一样的。说明是传递了input的引用。

最新文章

  1. 1.openGL 初探
  2. SQLServer2012在登录远程服务器实例时报错:尝试读取或写入受保护的内存
  3. 使用NodeJS、GruntCLI遇到的问题
  4. 鸡和蛋的OO设计
  5. win7下如何安装JDK
  6. TKinter之文本域与多窗口
  7. [Flex] ButtonBar系列——labelFunction用户提供的函数,在每个项目上运行以确定其标签
  8. C# Keynote
  9. HDU1518 Square
  10. SCOI2007修车
  11. git 远程 强制合并本地
  12. SpringBoot 2.0 更优雅的配置注入
  13. 诡异的楼梯 HDU1180
  14. memory consistency
  15. NDK开发: 打印C代码的调试信息Log
  16. [UE4]Switch on String,根据字符串决定条件分支,类似于高级语言中的switch语句
  17. Spring Boot学习笔记:项目开发中规范总结
  18. Django两天搭建个人博客
  19. BZOJ3244 NOI2013树的计数(概率期望)
  20. 使用hping3/nping施行DoS攻击

热门文章

  1. Gym 101257G 24 (概率+二分)
  2. Java 静态代理与动态代理
  3. angular 自定义filter
  4. 使用Dubbox构架分布式服务
  5. GPIO的配置过程
  6. java Http消息传递之POST和GET两种方法
  7. oracle 归档日志满 报错ORA-00257: archiver error. Connect internal only, until freed
  8. AspNetCore - MVC实战系列(一)
  9. SQL Server 中统计信息直方图中对于没有覆盖到谓词预估以及预估策略的变化(SQL2012--&gt;SQL2014--&gt;SQL2016)
  10. C#总结(二)事件Event 介绍总结