首页 > 解决方案 > 字符串流的用户定义文字

问题描述

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

#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;
}

但是,当我运行它时,我得到一个运行时异常:“访问冲突读取位置...”

你能告诉我,我的代码中的错误在哪里?

标签: c++c++17stringstreamuser-defined-literals

解决方案


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

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

推荐阅读