stringstream的用户定义文字



我写了一个运算符函数,当出现后缀_f时返回std::stringstream

#include <iostream>
#include <sstream>
#include <utility>
static std::stringstream&& operator "" _f(const char* const s, const size_t _) {
return std::move(std::stringstream() << s);
}
int main() {
const auto s = "Number: "_f << 10 << 'n';
std::cout << s.str();
return 0;
}

然而,当我运行这个我得到一个运行时异常:"访问违例阅读位置…">

你能告诉我,我的代码哪里出错了吗?

operator返回对函数内部临时std::stringstream对象的引用,导致悬空引用。你应该直接返回std::stringstream

static std::stringstream operator "" _f(const char* const s, const size_t _) {
return std::stringstream() << s;
}

最新更新