gpt4 book ai didi

c++ - 从流中读取以初始化只读变量

转载 作者:行者123 更新时间:2023-12-02 09:55:31 25 4
gpt4 key购买 nike

我正在寻找以下代码的替代方案

void foo(std::istream& in) {
/*const*/ std::string token;
in >> token;
}

其中局部变量 token 可以是 const。我可以想象以下带有 IIFE 的解决方案,但这看起来非常复杂:
void foo(std::istream& in) {
const std::string token = [&]{
std::string v;
in >> v;
return v;
}();
}

有更简单的选择吗? (不调用其他自己的辅助函数)。

编辑:不需要使用>>-op。我只想从流中读取空格分隔的字符串。

最佳答案

不幸的是,由于 istream 的限制,您尝试执行的操作是不可能的。接口(interface),它适用于非常量引用。在变量被修改后“添加 const”的最佳方法是使用辅助函数(或 lambda):

template <typename T, typename CharT, typename Traits>
T read_from(std::basic_istream<CharT, Traits>& is)
{
T value;
is >> value;
return value;
}

然后依靠 named return value optimization (NRVO)消除多余的变量:(即使没有发生 NRVO,值也会被移动而不是复制)
const auto token = read_from<std::string>(in);

关于c++ - 从流中读取以初始化只读变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60462815/

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