c++ - 如何将字符串文字传递给用 C++ 处理的函数?

标签 c++ string call-by-value

考虑以下代码:

void consumeString(std::string str){
  /* some code */
}

void passStringObject(){
  std::string stringObject = "string literal";
  consumeString(stringObject);
}

void passStringLiteral(){
  consumeString("string literal");
}

现在考虑以下两种情况:

1) 函数 passStringObject() 被调用。

2) 函数passStringLiteral()被调用。

在情况 1 中,我假设 - 在 passStringObject 中调用函数 consumeString 时 - 变量 stringObject 只是传递给函数 consumeString 并且(由于按值调用)字符串类的复制构造函数被调用,因此参数 str 是传递给变量 stringObject 的拷贝函数 consumeString

但是当调用函数 consumeString 时情况 2 会发生什么?字符串类的(重载)赋值运算符(可能在后台将文字分配给某个“隐藏”变量?)在调用复制构造函数并将“隐藏”变量的值复制到参数 之前隐式调用海峡

最佳答案

在情况 2 中,std::string(const char*) 构造函数将在对象传递给 consumeString 之前被调用,然后它将复制临时字符串对象.

关于c++ - 如何将字符串文字传递给用 C++ 处理的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21778360/

相关文章:

javascript - TypeScript 引用调用困惑

c++ - 如何使用 boost::progam_option 和 boost::command_line_Parser 验证文件扩展名

c++ - 当然,我在使用 boost :replace_all. 完整性检查时做错了什么?

python - 根据特定子字符串的索引对字符串列表进行排序

c++ - 学习 CPP : Split string and manipulation?

java - 将 Java 对象实例化为传递的对象引用

c++ - 为什么在 std::move 到抛出函数后成员 unique_ptr<> 保持非空?

c++ - 关于 vector 的调整大小和保留的奇怪内存行为

c++ - 即使我一次使用编译指示,也会出现C++错误C2535

c++ - 按名称调用/按值调用