【发布时间】:2015-12-21 18:12:37
【问题描述】:
我有一个返回值的 get 方法:
int Foo::getValue() const
{
return value_;
}
我正在使用以下代码将此值写入二进制文件:
void Bar::write(const Foo& foo)
{
/* some code... */
file_.write(reinterpret_cast<char*>(&foo.getValue()), sizeof(int));
}
而且似乎一切正常。但我不确定 &foo.getValue() 的事情。会不会一直返回getValue()的返回值地址,还是有什么陷阱?
EDIT1:我不想为此创建一个临时变量。
EDIT2:是的,它可以编译并且工作正常。
EDIT3: write 是 ostream::write
EDIT4:使用 /Wall 和 /Za 将无法编译:错误 C2102: '&' requires l-value
【问题讨论】:
-
reinterpret_cast<char*>(&foo.getValue())这对我来说似乎很危险。std::string不仅仅是一个空终止的char *...你不能只使用foo.getValue().c_str()吗? -
那甚至不应该编译。如果一个函数按值返回,那么它返回一个右值。您不能获取右值的地址。
-
请看几本书(你完全错了)
-
你真的,真的应该为此创建一个临时变量。
-
传递
/Wall /Za作为编译选项。
标签: c++ function memory-address