C++ 中将 char* 类型的的实参传给形参类型为 const string& 的函数会不会有 string 类型的临时变量产生?

如题所述

第1个回答  2012-03-31
会的!
假设有定义void fun(const string& s){}
那么当调用 fun("123");时, 会在栈中创建一个string的对象,并且用“123”初始化; 然后用这个对象做参数传给fun(); 最后在fun()返回后这个string对象析构。
第2个回答  2012-04-03
string 类型是经过优化的,当直接负值一个常量字符串的时候,他不会开辟空间而是将内部指针直接指向地址空间,只有在操作字符串的时候才会开辟空间,这样效率高。
第3个回答  2012-03-30
举个例子:
string name;
char a[10];
往a里放了一堆字符。
name = a;
这里就相当于将a传递给 赋值操作符(参数为const string &)
1、如果string类中没有重载参数是const char *的赋值操作符,
这个时候系统会调用参数是(const char *)的构造函数创建一个临时副本,然后将临时副本的内容赋值给name。
2、如果string类中有重载参数是const char *的赋值操作符,不会产生副本。本回答被提问者采纳

C++ 中将 char* 类型的的实参传给形参类型为 const string& 的函数会...
会的!假设有定义void fun(const string& s){} 那么当调用 fun("123");时, 会在栈中创建一个string的对象,并且用“123”初始化; 然后用这个对象做参数传给fun(); 最后在fun()返回后这个string对象析构。

c++中 stract strcpy strlen strcmp 都怎么用?传入的实参是什么类型的...
在C++中,`strcpy`, `strncpy`, `strlen`, 和 `strcmp` 是四个常用的字符串处理函数,它们在处理字符串时各有其特定用途。让我们逐一了解它们的用法和实参类型。首先,`strcpy` 函数用于将一个字符串完全复制到另一个字符串。例如:当你想要将一个字符数组,如 char a[30] = "hello"; 中的内...

C++ 函数形参里的const char作为返回值问题
形参是char *类型,实参是cons chart *类型时,编译程序会给出错误信息,意思是被调函数可以改变串的内容,而实参又是const类型,这样的实参不允许改变,二者之间不能融合,即使函数不改变形参的内容也不行。但形参是const char *,实参是 char *是可行的,当要返回形参指针时,其返回类型必须是const ...

C++里如何把char a[2]中数据赋给WORD类型数据组成一个字数据~_百度知 ...
size_t sz = sizeof( foo() ); \/\/ foo() 的返回值类型为char,所以sz = sizeof(char ),foo()并不会被调用 printf("sizeof( foo() ) = %d\\n", sz);} C99标准规定,函数、不能确定类型的表达式以及位域(bit-field)成员不能被计算sizeof值,即下面这些写法都是错误的: sizeof( foo );\/\/ error...

...类型的实参和"const char*"类型的形参不兼容 求高手帮忙解释并解决...
你要看看puts()函数的参数,是个const char*类型,const是确保指针的安全性的,你这里可以不用理他,但是 char * 是一个字符串,但是你传递给他的是一个char就是一个字符,这里应该是一个字符串的地址啊 改成下面的就行了 include<stdio.h> include<string.h> char* geng(char a[]){ char t...

C++中函数的const参数一定要传入const实参吗?
要注意unsinged char、signed char、char在C++中是不同的三种类型,char的算术运算结果类似unsigned还是signed,由实现(编译器)决定。ISO C允许不同类型指针的隐式转换,包括参数传递时实参向形参类型的转换。但是ISO C++对于类型检查更严格,必须使用显式的类型转换。

在c++函数的形参前加const关键字,是为了提高函数的
在 C++ 函数的形参前加上 const 关键字,通常是为了表明该函数不会修改形参所指向的对象。这有助于提高函数的可靠性、可维护性和安全性。具体来说,将形参声明为 const 类型,可以避免在函数内部无意中修改参数的值,从而防止不必要的副作用。这对于函数的调用者来说也是一种保障,可以放心地传递参数...

c++参数类型问题FILE *fopen( const char *filename, const char *mode...
这里的const关键字只是用来限定filename和mode这两个参数在函数里是不能被改变的,如果试图改变,编译器就会报错.所以你传入的只要是字符串指针就行了.至于"abcdefg"编译会把它转化成字符指针类型,指向首个字符'a'.比如char * a="abcdefg";是正确语句 ...

C++字符串小问题,请大家帮个忙,很简单
把形参设置成const,子函数就无权中修改其内容,保护了数据的安全性。所以在写传给子函数指针型数据时,如果不想(或不能)改变指针所指的数据,将指针的类型声明为const,即常量,这时可以防止在子函数里无意的改变其内容。但是对于简单的数据传递,由于是把数据复制到参数,子函数和主函数的数据完全不...

实参和形参的的使用疑问
long strtol(char * nptr, char ** endnptr, int base),CString str("aa");long l_str = strtol(str, NULL, 10);这个不应该理解为把把str的首地址赋给指针 应该是这样的吧 把str这个对象的引用传递给nptr这个指针,在这里str的引用是一个固定值,就是一静态指针;和fun(&a)一个道理 如果是...

相似回答