发现一种解决方案,可以将rvalue用作lvalue:
&(std::string()=std::string("Hello World"));
但不确定使用这种结构是否合法。
类似于这样的代码对我有效。
typedef std::pair<const char *, const std::string *> custom_pair;
std::ostream & operator <<(std::ostream & os, const custom_pair & kv)
{
if (kv.first && kv.second && !kv.second->empty())
os << kv.first << *kv.second;
return os;
}
std::ostringstream q;
q << custom_pair("example_string=", &(std::string() = IntToString(1)));
在 custom_pair
构造函数中,需要将地址作为第二个参数传入,但是有人能解释一下使用 this
是否正确吗?
custom_pair()
到底是什么。如果需要,请提供一个 [MCVE]!请尽量自我包含问题,不要只提供链接(这些链接可以作为附加信息)。 - πάντα ῥεῖIntToString
的结果存储在其他地方,否则您将拥有一个悬空指针。 - AndyGoperator=
返回一个左值,这样“转换”了右值为左值,从而允许取地址。但是,在完整表达式的末尾临时对象消失之前,必须立即使用该地址。在悬崖边上单脚站立也是合法的,但我也不想尝试。 - Bo Persson