将C-风格字符串用作string对象引用参数
- 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的引用。
将C-风格字符串用作string对象引用参数的更多相关文章
- C 风格字符串、string 类要点总结
1. C风格字符串 1.1 其它 头文件<cstring> 特殊性质:C风格字符串以空字符\0结尾 1.2 读取一行的区别 1.2.1 cin.getline(array1,n,char) ...
- [技术] OIer的C++标准库 : 字符串库<string>
引入 上次我在博客里介绍了OI中可能用到的STL中的功能, 今天我们接着来发掘C++标准库中能为OI所用的部分. 众所周知, OI中经常用到字符串相关的处理, 这时善用字符串库可以使一些操作更加简洁易 ...
- String格式化参数整理
Java String格式话参数整理如下: conversion:转换格式,可选的格式有: d 整数型(十进制) c Unicode字符 b Boolean值 s String f 浮点数(十进制) ...
- string字符串转C风格字符串 进而转换为数字
要求如题 头文件stdlib.h中有一个函数atof() 可以将字符串转化为双精度浮点数(double) double atof(const char *nptr); 此字符串为C风格字符串,因此需要 ...
- C风格字符串和C++ string 对象赋值操作的性能比较
<<C++ Primer>> 第四版 Exercise Section 4.3.1 部分Exercise 4.2.9 习题如下: 在自己本机执行如下程序,记录程序执行时间: # ...
- 标准库string与C风格字符串
返回字符串的长度 string标准库 #include<iostream> #include<cstring> using namespace std; int main() ...
- String与C风格字符串转换
String字符串转换为C风格字符串需要利用string类的成员函数c_str().而C风格字符串转换转换为string字符串可以直接利用运算符=.首先介绍c_str()函数原型: const val ...
- c风格字符串函数
十一.C 风格字符串 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat( ...
- Javascript的字符串(String)操作学习
1.bold() 方法用于把字符串显示为粗体.语法: stringObject.bold() 如下,对str进行bold操作之后,实际上时对这个字符串加了<b>标签,在文档中将以粗体进行展 ...
随机推荐
- Java ---自定义标签
本篇文章介绍自定义标签,可能在工作中很少涉及到自己来定义一个标签库,因为我们基本上都是使用的大神写的标签库,基本上直接使用即可,但是从自身的发展来看,通往高级程序员的道路上,开发框架就需要大 ...
- JavaWeb总结(八)—EL表达式
一.EL表达式简介 EL全名Expression Language.主要有以下作用. 1.获取数据 EL表达式主要用于替换JSP页面的脚本表达式,以及各种类型的Web域中检索Java对象.获取数据.( ...
- 读书笔记 effective c++ Item 47 使用traits class表示类型信息
STL主要由为容器,迭代器和算法创建的模板组成,但是也有一些功能模板.其中之一叫做advance.Advance将一个指定的迭代器移动指定的距离: template<typename IterT ...
- ios url网址相关问题解说
问题1:ios网址中存在汉字的情况,需要GB_18030_2000编码方法如下: // 汉字转编码 + (NSString *)changeChineseWithEncodingGB_18030_20 ...
- AOP中的ASPECTJ
一.准备 1.架包 2.配置文件 二.注解的形式 UserDao.java package cn.itcast.spring.aspectj.annocation; public class User ...
- 【linux】安装samba服务
学习linux一般是在虚拟机中进行,这样就需要你在windows与linux虚拟机中切换,Samba是很好的共享服务 下面是在汇文培训时宋老师写的配置samba的过程,很容易就能配置成功.还有一些视频 ...
- Eclipse 安装反编译插件
前言:在实际的开发中几乎都会使用到一些框架来辅助项目的开发工作,对于一些框架的代码我们总怀有一些好奇之心,想一探究竟,有源码当然更好了,对于有些JAR包中的代码我们就需要利用反编译工具来看一下了,下面 ...
- 深入理解MVC
首先我们来看看MVC架构的示意图: 和访问者交互的是控制层(Controller层),控制器(controller)是同类交互的集合,每一个交互的操作,都对应了一个动作(act ...
- 关于iOS开发首次进入需要获取地理位置
今天给大家简单介绍一下iOS开发过程中会遇到的获取地理位置的问题,(话不多说进入正题)这里给大家讲解一下两种在APPdelegate获取地理位置的方法: 一:首先是用系统的方法获取地理位置: 1. 首 ...
- python在cmd上导包成功,但是python charm上面就提示找不到
失败 成功 原因:我的python file名称和numpy 的名字一样了,把python file 的名字改了就好了