C++ llvm::模块必须位于运算符的左侧。*和->*
我正在阅读并看到这些陈述(在不同的位置): 我得到一个错误: myTest.cpp:116:16:错误:“llvm::Module”模块->get()中没有名为“get”的成员 为什么C++ llvm::模块必须位于运算符的左侧。*和->*,c++,pointers,llvm,unique-ptr,C++,Pointers,Llvm,Unique Ptr,我正在阅读并看到这些陈述(在不同的位置): 我得到一个错误: myTest.cpp:116:16:错误:“llvm::Module”模块->get()中没有名为“get”的成员 为什么llvm::Module可以同时位于*和->*的左侧?为什么module.get()可以工作,但是TheModule->get()不能 这与std::unique\u ptr有关吗 这与std::unique\u ptr有关吗 是的 这是您设法用module.get()调用的std::unique\u ptr的ge
llvm::Module
可以同时位于*
和->*
的左侧?为什么module.get()
可以工作,但是TheModule->get()
不能
这与std::unique\u ptr
有关吗
这与std::unique\u ptr有关吗
是的
这是您设法用module.get()调用的std::unique\u ptr
的get
,它返回托管指针,TheModule->get()
不同,它相当于:
TheModule.get()->get();
(*TheModule).get();
(*TheModule.get()).get();
这些都是相同的,它们在托管的llvm::Module
实例上调用get
。当然,没有get
,这就是为什么会出现错误
一旦你了解了std::unique\u ptr
的作用,你就不会感到惊讶了。这些运算符是存在的,因此您可以使用智能指针(语法上)与使用原始指针的方式相同。并返回指向托管对象的原始指针
这与std::unique\u ptr有关吗
是的
这是您设法用module.get()调用的std::unique\u ptr
的get
,它返回托管指针,TheModule->get()
不同,它相当于:
TheModule.get()->get();
(*TheModule).get();
(*TheModule.get()).get();
这些都是相同的,它们在托管的llvm::Module
实例上调用get
。当然,没有get
,这就是为什么会出现错误
一旦你了解了std::unique\u ptr
的作用,你就不会感到惊讶了。这些运算符是存在的,因此您可以使用智能指针(语法上)与使用原始指针的方式相同。并返回指向托管对象的原始指针。使用“箭头”运算符->
访问包含的指针,使用点运算符
访问唯一\u ptr
对象
比如说
TheModule.get() // Calls std::unique_ptr<T>::get()
TheModule->getFunction(arg); // Calls llvm::Module::getFunction()
TheModule.get()//调用std::unique\u ptr::get()
模块->获取函数(参数);//调用llvm::Module::getFunction()
使用“箭头”运算符->
访问包含的指针,使用点运算符
访问唯一的\u ptr
对象
比如说
TheModule.get() // Calls std::unique_ptr<T>::get()
TheModule->getFunction(arg); // Calls llvm::Module::getFunction()
TheModule.get()//调用std::unique\u ptr::get()
模块->获取函数(参数);//调用llvm::Module::getFunction()
记住a->b
是(*a).b
的语法糖。记住a->b
是(*a).b
的语法糖。