`
东边日出西边雨
  • 浏览: 257897 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

c++中函数参数返回值用string好还是const char *好

    博客分类:
  • c
 
阅读更多

有这样一个函数test需要两个字符串作为参数,那么test的原型定义成test(string, string)呢还是定义成test(const char*, const char*)还是其他呢?

 

当这样使用时 test("hello", "world"); 如果原型是第一种,就需要首先构建string对象,然后因为是值传递需要内存拷贝。

如果是第二种,由于需求是需要两个string型变量,参数传进来之后还得转换成string型,如:

string a(A);

string b(B);

这也不省事,如果用另外一种就非常好了,就是传递string引用,原型声明为test(const string& A, const string& B)字符串传递进来时,并没有发生内存拷贝,效率会很高,并且AB可以直接当成string型来用,也比第二种方便。

 

关于函数的返回值,最好还是返回“值”吧,最好不要返回地址啊引用啊什么的,因为你不清楚使用者会不会改变这些值,如果返回的是引用,内存中只有一份,如果用户修改了值,势必会影响到其他的。

 

所以这个函数的原型最好是 string test(const string& A, const string& B)

分享到:
评论

相关推荐

    C++常用字符串分割方法实例汇总

    原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串。 参数说明:str为要分解的字符串,delim为分隔符字符串。 返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回...

    c++中string类成员函数c_str()的用法

    2.c_str()函数返回一个指向正规c字符串的指针,内容和string类的本身对象是一样的,通过string类的c_str()函数能够把string对象转换成c中的字符串的样式; 3.操作c_str()函数的返回值时,只能使用c字符串的操作函数,如:...

    最新名企标准通用C++面试题,

    答:栈: 存放局部变量,函数调用参数,函数返回值,函数返回地址。由系统管理 堆: 程序运行时动态申请,new 和 malloc申请的内存就在堆上 (Google搜):DOS下程序是独占方式,堆分为近堆和远堆,近堆和栈是在数据段...

    C++的字符串分割函数的使用详解

    原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串。 参数说明:str为要分解的字符串,delim为分隔符字符串。 返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回...

    指纹识别C++

    #include <string.h> #include "file.h" /* 对象的这些接口实现是私有的,不必为用户所知 */ typedef struct iFvsFile_t { FILE *pf; /* 文件指针 */ } iFvsFile_t; /***************************************...

    c++将字符串转数字的实例方法

    用 法:int atoi(const char *nptr); 详细解释:atoi是英文array to integer 的缩写。atoi()会扫描参数nptr字符串,如果第一个字符不是数字也不是正负号返回零,否则开始做类型转换,之后检测到非数字或结束符 /0 时...

    C语言中查找字符在字符串中出现的位置的方法

    C语言strchr()函数:查找某字符在字符串中首次出现的位置 头文件:#include <string> strchr() 用来查找某字符在字符串中首次出现的位置,其原型为: char * strchr (const char *str, int c); 【参数】str 为要...

    新手学习C++入门资料

    C++函数的原型中可以声明一个或多个带有默认值的参数。如果调用函数时,省略了相应的实际参数,那么编译器就会把默认值作为实际参数。可以这样来声明具有默认参数的C++函数原型: #include iostream.h void show...

    LuaBind 源码 (Lua增强库)

    为了暂停(yielding)C++函数,(不支持在C++侧和Lua侧传送数据块),你可以使用 yield 策略. 接受 object 参数的resume_function()的重载版本要求对象必须是一个协程对象.(thread) lua_State* thread = lua_newthread(L...

    你必须知道的495个C语言问题

    1.20 constchar*p、charconst*p和char*constp有什么区别? 复杂的声明 1.21 怎样建立和理解非常复杂的声明?例如定义一个包含N个指向返回指向字符的指针的函数的指针的数组? 1.22 如何声明返回指向同类型函数...

    c/c++ 学习总结 初学者必备

    如果非得要用指针参数去申请内存,那么应该改用“指向指针的指针”,由于“指向指针的指针”这个概念不容易理解,我们也可以用函数返回值来传递动态内存。 常常有人把return语句用错了。这里强调不要用return语句...

    《你必须知道的495个C语言问题》

    4.9 能否用void ** 通用指针作为参数,使函数模拟按引用传递参数? 48 4.10 我有一个函数extern intf(int *); ,它接受指向int型的指针。我怎样用引用方式传入一个常数?调用f(&5);似乎不行。 49  4.11 C语言...

    经典C/C++面试题目大汇总(全附答案).doc

    因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。 (3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*...

    C语言FAQ 常见问题列表

    o 6.8 但是如果 NULL 的值改变了, 比如在使用非零内部空指针的机器上, 难道用 NULL (而不是 0) 不是更好吗? o 6.9 用预定义宏 #define Nullptr(type) (type *)0 帮助创建正确类型的空指针。 o 6.10 这有点奇怪。...

    Linux启动新进程的三种方法

    const char *string); string:shell命令字符串 返回值:成功返回命令退出码,无法启动shell,返回127错误码,其他错误,返回-1。 代码示例如下: process_system.c #include #include int main() { pri

    linux c++ 调用shell命令,保存执行结果 示例

    下面的代码用于在c++函数里面调用shell,并且执行命令,取回命令执行结果。 #include #include #include #include int main() { const int SIZE = 64; const int MAX_RESPONSE_SIZE = 65535; char charBuff[SIZE...

    语言程序设计课后习题答案

    C++是一个更好的C,它保持了C的简洁、高效、接近汇编语言、具有良好的可读性和可移植性等特点,对C的类型系统进行了改革和扩充,因此C++比C更安全,C++的编译系统能检查出更多的类型错误。 C++语言最重要的特点是...

Global site tag (gtag.js) - Google Analytics