C++ llvm::模块必须位于运算符的左侧。*和->*

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

我正在阅读并看到这些陈述(在不同的位置):

我得到一个错误:

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
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
的语法糖。