将C-风格字符串用作string对象引用参数
2024-08-24 08:58:19
- 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.openGL 初探
- SQLServer2012在登录远程服务器实例时报错:尝试读取或写入受保护的内存
- 使用NodeJS、GruntCLI遇到的问题
- 鸡和蛋的OO设计
- win7下如何安装JDK
- TKinter之文本域与多窗口
- [Flex] ButtonBar系列——labelFunction用户提供的函数,在每个项目上运行以确定其标签
- C# Keynote
- HDU1518 Square
- SCOI2007修车
- git 远程 强制合并本地
- SpringBoot 2.0 更优雅的配置注入
- 诡异的楼梯 HDU1180
- memory consistency
- NDK开发: 打印C代码的调试信息Log
- [UE4]Switch on String,根据字符串决定条件分支,类似于高级语言中的switch语句
- Spring Boot学习笔记:项目开发中规范总结
- Django两天搭建个人博客
- BZOJ3244 NOI2013树的计数(概率期望)
- 使用hping3/nping施行DoS攻击
热门文章
- Gym 101257G 24 (概率+二分)
- Java 静态代理与动态代理
- angular 自定义filter
- 使用Dubbox构架分布式服务
- GPIO的配置过程
- java Http消息传递之POST和GET两种方法
- oracle 归档日志满 报错ORA-00257: archiver error. Connect internal only, until freed
- AspNetCore - MVC实战系列(一)
- SQL Server 中统计信息直方图中对于没有覆盖到谓词预估以及预估策略的变化(SQL2012-->;SQL2014-->;SQL2016)
- C#总结(二)事件Event 介绍总结