函数调用前面的 :: 是什么意思?

What does :: mean in front of a function call?

本文关键字:意思 是什么 函数调用 前面      更新时间:2023-10-16
I2CDevice::I2CDevice(unsigned int bus, unsigned int device) {
this->file=-1;
this->bus = bus;
this->device = device;
this->open();
}
int I2CDevice::open(){
string name;
if(this->bus==0) name = BBB_I2C_0;
else name = BBB_I2C_1;
if((this->file=::open(name.c_str(), O_RDWR)) < 0){
perror("I2C: failed to open the busn");
return 1;
}
if(ioctl(this->file, I2C_SLAVE, this->device) < 0){
perror("I2C: Failed to connect to the devicen");
return 1;
}
return 0;
}

以上是做Linux I2C接口的代码的一部分,我的问题在行中:

this->file=::open(name.c_str(), O_RDWR)

我认为这是试图使用 open() 函数为文件描述符 this->file 分配一个值。但是为什么有一个"::"符号呢?为什么不只是"open()"。

这是C++名称解析。::运算符分隔命名空间。当它以名称开头时,它是对顶级全局命名空间的显式引用。它在此处的使用保证了它引用的是 C 库声明的open函数,而不是恰好位于类、当前命名空间或任何using namespace声明中的任何open

在此特定示例中,::open是必需的,因为它位于open类函数内。在此处简单地调用open会导致名称解析错误,因为类中有open但没有匹配的覆盖。如果参数确实匹配,它将是一个递归调用,这不是您想要的。