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());
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)