C++中 string作为参数的传递(string类型的引用 )

C++中 string作为参数的传递(string类型的引用 ),第1张

string的引用类型可以减少内存拷贝

/ string refer

在传递参数的时候,如果参数是string类型,可以用string类型的引用,减少内存的拷贝。

/

#include <iostream>

#include <cstring>

using namespace std;

void func(const std::string& str){

cout << "str = " << str << endl;

cout << "address of \"str\" : " << &str << endl;

}

void funcB(const std::string str){

cout << "str = " << str << endl;

cout << "address of \"str\" : " << &str << endl;

}

int main(int agrc, char argv){

string strInMain= "test";

func(strInMain);

funcB(strInMain);

cout << "strInMain = " << strInMain << endl;

cout << "address of \"strInMain\" : " << &strInMain << endl;

return 0;

}

func没有拷贝变量,而是直接将main中的strInMain的地址传入,所以在func中的参数str的地址和main中strInMain的地址相同。

funcB参数对strInMain进行拷贝,所以参数str的地址为新的内存空间

string

str;

对于函数fun(char

,xx,)

使用fun(strc_str(),xx,)可把string类型传入char类型的函数参数中。

string是C++编程语言中的字符串。

string类是不可变的,对string类的任何改变,都是返回一个新的string类对象,而char

是C语言中的字符指针,两者进行相应的转换,即可进行专递。

在形参表中以符号“&”开始的参数即为引用参数。如果一个形参是引用参数,调用部位将把实参的地址传递给子程序。子程序可以改变传递给引用参数的任何实参,因为子程序 *** 作的是真正的变量,而不是它的副本。

一般情况下,对于任意一个类A,如果程序员不显示的声明和定义上述函数,C++编译器将会自动的为A产生4个public inline 的默认函数,这时候就用赋值参数。

需要改变实参的值,比如swap()。参数是引用时,函数接收的是实参的左值而不是值的拷贝。这意味着函数知道实参在内存中的位置,因而能够改变它的值或取它的地址。

扩展资料:

注意事项

1、如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐含了错误。以类String的两个对象a,b为例,假设am_data的内容为“hello”,bm_data的内容为“world”。

2、拷贝构造函数和赋值函数非常容易混淆,常导致错写、错用。拷贝构造函数是在对象被创建时调用的,而赋值函数只能被已经存在了的对象调用。

如果一个参数可能在函数中指向不同的对象,或者这个参数可能不指向任何对象,则必须使用指针参数 。引用参数的一个重要用法是它允许在有效地实现重载 *** 作符的同时,还能保证用法的直观性。

-引用参数

-赋值函数

字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换

Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char类型

在Qt下怎样将QString转char呢,需要用到QByteArray类,QByteArray类的说明详见Qt帮助文档。

因为char最后都有一个‘/0’作为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’

方法如下:

Qstring str;

char ch;

QByteArray ba = strtoLatin1();

ch=badata();

这样就完成了QString向char的转化。经测试程序运行时不会出现bug

注意第三行,一定要加上,不可以strtoLatin1()data()这样一部完成,可能会出错。

补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char就是乱码,采用如下方法解决:

方法1:

添加GBK编码支持:

#include <QTextCodec>

QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

然后改变上面的第三行为:QByteArray ba = strtoLoacl8Bit(); toLoacl8Bit支持中文

方法2:

先将QString转为标准库中的string类型,然后将string转为char,如下:

std::string str = filenametoStdString();

const char ch = strc_str();

 有几种方法。

使用string类的c_str()函数strcpy(str,stringc_str());

for循环实现

for(i

=0

;i

<

stringsize();i++)

str[i]

=

stringat(i);

使用string类的copy函数

stringcopy(str,0,stringsize());

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12158310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存