方法返回值的地址

Nek*_*ore 9 c++ function memory-address

我有一个返回值的get方法:

int Foo::getValue() const
{
    return value_;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码将此值写入二进制文件:

void Bar::write(const Foo& foo)
{
    /* some code... */

    file_.write(reinterpret_cast<char*>(&foo.getValue()), sizeof(int));
}
Run Code Online (Sandbox Code Playgroud)

似乎一切都运作良好.但我不确定那&foo.getValue()的事情.它总是返回getValue()返回值的地址还是有任何陷阱?

EDIT1:我不想为此创建临时var.

编辑2 :是的,它编译并正常工作.

EDIT3: write是一个ostream :: write

EDIT4:使用/ Wall和/ Za它将无法编译:错误C2102:'&'需要l值

Jon*_*Mee 4

标准禁止您获取右值的地址:/sf/answers/1992142631/不符合标准的编译器可能允许这种行为,但可以肯定的是,这不是跨平台的行为,也不是即使在编译器更新之间(可能更接近 C++ 标准)是否也能保证成功。

由于您不是为特定编译器编程,而是为 C++ 编程,因此找到在特定编译器中工作的东西不应该是您的目标。最好找到一种在标准范围内实现这一目标的方法。

执行此操作的几个简单选择是:

  1. 通过将其分配给临时值将其转换为左值。他们是免费的!编译器会立即优化它们
  2. 将 的 返回值更改getValue为此const int&将允许您使用左值。由于ints 通常是按值复制的,这可能不会对您的代码库产生影响,但它可能会
  3. 创建另一种可以直接返回的方法(const char*)&value_,滥用这个方法可能会遇到麻烦,所以要小心