我有一个现有的功能:
void foo(const Key* key = nullptr)
{
// uses the key
}
我想将它的指针传递给临时 Key 对象(即右值),例如:
foo(&Key());
这会导致编译错误,但在 C++ 11/14 中有什么方法可以做到这一点吗?我当然可以:
Key key;
foo(&key);
但是我不需要object Key,我只需要在foo()和foo()里面
或者我可以这样做:
foo(new Key());
但是对象不会被删除。
最佳答案
我不认为这是个好主意,但如果你真的想要一个临时文件并且不能更改 foo
,你可以将临时文件转换为 const&
:
int main()
{
foo(&static_cast<const Key&>(Key{}));
}
或者,您可以将对象的创建“隐藏”在一个方便的函数后面:
template <typename T, typename F, typename... Ts>
void invoke_with_temporary(F&& f, Ts&&... xs)
{
T obj{std::forward<Ts>(xs)...};
f(&obj);
}
int main()
{
invoke_with_temporary<Key>(&foo);
}
另一种选择:提供采用引用的 foo
重载:
void foo(Key&& key)
{
foo(&key);
}
关于c++ - 在 C++ 11 中将指针传递给临时变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47458206/