zoukankan      html  css  js  c++  java
  • 将C-风格字符串用作string对象引用参数

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

      从上面两条属性我们得知: 如果形参类型为const string &,在调用函数时,使用的实参可以是string对象或者C-风格字符串,如用引号括起来的字符串字面量,以空字符结尾的char数组或指向char的指针变量。
    • 上面提到const引用为形参的属性,也就是说,如果引用的参数是const,则编译器在某些情况下会生成临时变量,比如下面这两种情况:
      1, 实参类型不正确,但可以转换为正确类型。
      2, 实参类型正确,但不是左值。
    • 下面我们来看代码实例。
       1 #include <iostream>
       2  #include <string>
       3  
       4  using namespace std;
       5  
       6  string version(string &a, const string &b);
       7  
       8  int main(void)
       9  {
      10      string input = "I love you."; 
      11      cout << "input address: " << &input << endl;
      12      const char* b = "***";
      13      cout << "i b address: " << &b << endl;
      14  
      15      version(input, b); 
      16  
      17      return 0;
      18  }
      19  
      20  string version(string &a, const string &b) 
      21  {
      22      using namespace std;
      23      cout << "a address: " << &a << endl;
      24      cout << "b address: " << &b << endl;
      25      return a;//没有这句会产生内存错误。返回引用。
      26  }
      27  /************************************
      28   * input address: 0x7ffe09a647f0
      29   * i b address: 0x7ffe09a647e8
      30   * a address: 0x7ffe09a647f0
      31   * b address: 0x7ffe09a64840
      32   * **********************************/
      其中,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的引用。
  • 相关阅读:
    关于桌面的图片打开很慢的解决方法
    用c#进行递归组合
    ajax,js,css 入门页面
    择日宣判此案,却常再无下文
    共享软件的明确定义
    [转]大逃亡,还没出来呢
    如何收集带有附件的网页
    送一份自家产的软件给园内的兄弟姐妹作“福利”
    [转]评蒙牛内幕
    蓝侠==la*uan,破解中国共享软件联盟著名灌水专家“蓝侠””
  • 原文地址:https://www.cnblogs.com/busui/p/5744714.html
Copyright © 2011-2022 走看看