在c++中将临时转换为引用
Convert temporary to reference in C++
我有以下代码:
#include <iostream>
#include <llvm/Module.h>
#include <llvm/LLVMContext.h>
#include <llvm/Support/raw_os_ostream.h>
int main()
{
llvm::Module *TheModule = new llvm::Module("my cool jit", llvm::getGlobalContext());
llvm::raw_os_ostream os(std::cerr);
TheModule->print(os, NULL);
return 0;
}
我要做的是改变这个:
llvm::raw_os_ostream os(std::cerr);
TheModule->print(os, NULL);
:
TheModule->print(llvm::raw_os_ostream(std::cerr), NULL);
。删除不需要的临时变量。这在c++中可能吗?
print函数接受一个引用:
void print(raw_ostream &OS, AssemblyAnnotationWriter *AAW) const
那么是否有办法将临时对象转换为引用呢?这可以用c++ 11的右值引用来实现吗?我不能更改API。这不应该是右值引用的用例吗?
首先,这不是c++中"temporary"的意思。你只是拥有一个只被使用一次的普通对象。临时工没有名字;事实上,只有在第二个示例中,流对象才是一个临时的!
这可以用c++ 11的右值引用来完成吗?
是的。
我不能更改API。这不应该是右值引用的用例吗?
可能。但你使用的API不支持它们,你说你不能改变它,就是这样。如果可以绕过这个限制,但其复杂性我不打算在这里讨论。
老实说,不过,我不会担心它。您的编译器足够聪明,不会使您的第一种方法比第二种方法效率更高或更低,并且您的第一段代码的冗长实际上使其更清晰,更易于阅读。
相关文章:
- 强制转换为引用类型
- 如何将 int 引用安全地转换为长引用?
- C 样式转换引用
- 将通用引用强制转换为可调用的 void 指针,反之亦然
- 隐式重新解释引用时强制转换,没有警告/错误
- 右值引用转换后的地址更改
- 通过引用传递参数时C++类型转换
- 为什么我需要在转换构造函数上引用 this->?
- 枚举类的 C 样式强制转换到基础类型 char 的引用
- 转换指针引用的字符串
- 隐式可转换参数,但属于引用类型
- 转换引用对象的边界框?
- C++将引用转换为指针?
- C++ 引用是否在需要时隐式转换为值?
- 如果可能的话,C++总是更喜欢右值引用转换运算符而不是常量左值引用吗?
- 返回对常量结构(指针类型)成员的引用:明显的左值到右值转换
- 从基类的共享指针向下转换到派生类的引用
- 为什么 const 允许在参数中隐式转换引用
- 与强制类型转换指针相比,在dynamic_cast中使用强制类型转换引用
- 动态强制转换引用和自动转换