字符串流的用户定义文字

User-defined literal for stringstream

我写了一个运算符函数,当后缀 _f 出现时 returns 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 return 是对函数内部临时 std::stringstream 对象的引用,导致悬空引用。你应该直接 return std::stringstream

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