我正在寻找以下代码的替代方案
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/