传递const char而不是std :: string作为函数参数
passing a const char instead of a std::string as function argument
这是一个新手问题,但我无法理解它的工作方式。
假设我具有下面的功能
void foo(const std::string& v) {
cout << v << endl;
}
和下面的我的程序中的呼叫。
foo("hi!");
本质上,我将 const char*
传递给一个函数参数,该函数参数引用了字符串,所以我对此调用有疑问。
为了通过参考通过一个参数,我是否有权说该变量至少在呼叫期间必须存在?如果是这样,在哪里创建了传递给函数的字符串?
我可以看到它有效:是否发生了,因为编译器创建了传递给参数或函数的临时string
?
是因为编译器创建传递给参数或函数的临时字符串?
是否发生了?
是的,允许临时性绑定到const
LVALUE参考。临时字符串v
在函数调用的持续时间内还活着。
请注意,这是可能的,因为std::string
具有带有const char*
参数的隐式转换构造函数。这是使它成为可能的同一构造函数:
std::string s = "foo";
相关文章:
- std中有类似find_last_of的函数,而string中没有
- 使用 std::string () const 函数启动线程或未来
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- std::string 构造函数如何处理固定大小的 char[]?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- 真的没有来自 std::string_view 的 std::string 的显式构造函数吗?
- 构造函数采用std::string_view与std::string并移动
- 为什么我的函数接受"std::string"进行排序不会改变它?
- std::string 可以作为 nlohmann::json 传递给显式构造函数
- 错误:调用"es_queue::set_rpc_vector(std::vector >&, std::__cxx11::string)"没有匹配函数
- 我正在将一个 std::string 传递给一个 boost 函数,该函数对该类型进行常量引用,但该值发生了变化
- 无效打印(矢量<string>)函数未打印
- 为什么我不必从 std::string 的函数中释放字符串c_str?
- 将(临时的?)std::string传递给使用它来构造一个接受副本的对象的函数的最佳方法是什么?
- C++ 模板函数无法将"std:string"转换为"double"作为回报
- 在线程中使用 std::string 函数是否安全?(C++)
- C++ 对 MBCS 使用 std::string 函数,对 UTF-16 使用 std::wstring 函数
- C++:STRING函数返回十六进制值而不是字符串
- 使用插入<string>函数时从字符到常量字符的转换无效
- C++:向量<通过<string>函数设置>初始化