码迷,mamicode.com
首页 > 其他好文 > 详细

将C-风格字符串用作string对象引用参数

时间:2016-08-06 20:32:54      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

  • 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-风格字符串用作string对象引用参数

标签:

原文地址:http://www.cnblogs.com/busui/p/5744714.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!