方法的返回值地址

NekoUnderscore

我有一个返回值的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:“&”需要左值

乔纳森·米

该标准禁止您使用右值的地址:https ://stackoverflow.com/a/28459180/2642059不符合标准的编译器可能会允许这种行为,但可以肯定的是,这种行为不会跨平台,也不会是否可以保证即使在更新编译器之间也能成功使它与C ++标准更加紧密地结合在一起时也能成功。

由于您不是针对特定编译器进行编程,而是针对C ++进行编程,因此找到在特定编译器中有效的方法不是您的目标。寻找一种在标准内完成此操作的方法将是更可取的。

这样做的几个简单选择是:

  1. 通过将其分配为临时值将其转换为左值。他们是免费的!编译器会立即对其进行优化
  2. 更改返回getValueconst int&这将让你与左值工作。由于ints通常是按值复制的,因此在您的代码库中可能不会有任何影响,但是可以
  3. 创建另一个可以直接返回的方法,(const char*)&value_但是请谨慎使用该方法

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章