【发布时间】:2013-06-01 10:27:34
【问题描述】:
假设我的文件如下所示:
#include <iostream>
#include <string>
using namespace std;
class testclass{
public: string name;
//testclass(const string& sref){
// name = sref;
//}
testclass(string str){
name = str;
}
~testclass(){}
};
int main(){
testclass t1("constStringRef");
cout << t1.name << '\n';
}
给定以下构造函数调用,构造函数 1 和 2 有什么区别:
testclass tobj("tmemberstring");
这是我的想法:
我知道通过引用传递意味着您不传递副本,但由于字符串参数,首先有一个字符串初始化(在这两种情况下都被视为局部变量,我假设),然后然后是在案例 1 中初始化对它的引用,或者在案例 2 中复制到新字符串 str。最后,两个构造函数都将值复制到成员字符串名称。如果我的想法是正确的,我会跳过一个步骤(复制到字符串 str)如果会使用第一个构造函数。
附加问题: 参数是否存储在堆栈区域中? 如果是这样,这个特定的字符串引用或对任何基本数据类型的引用将使用多少空间?
希望得到您的建议, 提前致谢
【问题讨论】:
-
代码中的所有内容都毫无意义。
n和s是什么?! -
在将代码膨胀到 StackOverflow 之前,您应该尝试编译代码!
-
抱歉重命名以使其更清晰,忘记重命名分配。
-
两者都不做;如果您要在类中存储字符串的副本,请按值接受参数,然后将
std::move它在构造函数的初始化列表中。
标签: c++ methods parameters reference constructor