字符串流的用户定义文字
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;
}
我写了一个运算符函数,当后缀 _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;
}