gpt4 book ai didi

c++ - std::string const& 参数是否复制传递的 const char*?

转载 作者:行者123 更新时间:2023-12-04 07:40:43 32 4
gpt4 key购买 nike

对不起,如果这是一个非常菜鸟的问题。我需要知道 C++ 是否已经支持以下行为:

void sampleFunc(std::string const& p_sVal){

Log("this is your string: " + p_sVal);

}

int main(){

sampleFunc("my string"); //does the param allocates a copy of "my string"...?

}
参数 std::string const& p_sVal分配传递的 const char* 的拷贝或者编译器足够聪明,知道传递的是 const char*并且可以优化它不需要分配和复制?
如果没有,您能否建议实现此目的的示例代码? (注意:除了 string_view 解决方案。)

最佳答案

临时std::string是根据您传递给它的字符串文字构造的,用于 std::string const&要引用的参数。
正如评论中所建议的,std::string拥有它的存储(否则它会是 std::string_view ,不是吗?)。在我看来,仅此观察并不能真正告诉您临时 std::string将无法从传递的参数中窃取资源。
资源仍然可以移动,因为您将右值传递给 sampleFun , 对?不,错了,因为正如你所看到的 here , 一个文字字符串,如 "my string"在您的 main , 是左值,而不是右值。
哦,即使字符串文字是右值,来自 std::string 's (well, std::basic_string 's) constructor 的文档您会看到没有其他构造函数采用 &&除了“移动构造函数”(即复制构造函数的移动版本,即采用与其正在构造的类型相同的类型的构造函数,即 std::string ,而不是 const char* )。
请注意,由于您正在执行 "this is your string: " + p_sVal你确实想要一个 std::string因为你需要 std::operator+上类。你可以有 sampleFunc接受 const char* ,但是你必须包装 p_sValstd::string{…} 中的字符串文字为 +上类。

关于c++ - std::string const& 参数是否复制传递的 const char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67480842/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com