gpt4 book ai didi

c++ - 从 std::stringstream 传递 std::string 引用作为参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:04 28 4
gpt4 key购买 nike

我正在使用 std::stringstream 构造一个字符串,然后尝试将完成的字符串作为对函数的引用传递,该函数将 std::string& 作为参数。

我在 GCC 上遇到编译错误:

../src/so.cpp:22:21: error: invalid initialization of non-const reference of type ‘std::string& {aka std::basic_string<char>&}’ from an rvalue of type ‘std::basic_stringstream<char>::__string_type {aka std::basic_string<char>}’
../src/so.cpp:12:6: error: in passing argument 1 of ‘void myFunc(std::string&)’
make: *** [src/so.o] Error 1

相同的代码在 Windows VS2012 上编译,但在我的 Linux 和 Android 构建上失败。这是什么原因?

我可以通过临时将 ss.str() 分配给一个临时的 std::string 然后通过引用传递该字符串来解决这个问题,但这看起来有点傻。干净地执行此操作的正确方法是什么?

#include <iostream>
#include <sstream>

void myFunc (std::string& msg)
{
std::cout << msg << std::endl;
}

int main (void)
{
std::stringstream ss;
ss << "this is a test";

myFunc (ss.str()); // Fails

std::string s = ss.str();
myFunc (s); // Pass

return 0;
}

最佳答案

问题在于 myFunc 采用非常量左值引用。 stringstream::str() 按值返回一个字符串。您不能在标准 C++ 中将临时值绑定(bind)到非常量左值引用,但 VS 有一个允许这样做的“扩展”。这就是它在 VS 而不是在其他编译器上编译的原因。

const 另一方面,左值引用可以绑定(bind)到右值。因此,修改您的功能将使它的工作:

void myFunc (const std::string &msg) { /* as before */ }

关于c++ - 从 std::stringstream 传递 std::string 引用作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28441580/

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