繁体   English   中英

cpp中“&::”的含义是什么?

[英]what's the meaning of "&::" in cpp?

在 cpp 中,
我知道&用于获取地址
::用于获取类的成员,
但是, &::的用法是什么?

下面是qt5的函数connect的例子:

QtWidgetsApplication2::QtWidgetsApplication2(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    connect(ui.pushButton_select, &QPushButton::clicked,this,&::QtWidgetsApplication2::select_file);   
}

void QtWidgetsApplication2::select_file()
{
    file_path = QFileDialog::getOpenFileName(NULL, QStringLiteral("选择文件"), "D:", QStringLiteral("音频文件(*wav)"));
}

&::在此行中的含义是什么:

connect(ui.pushButton_select, &QPushButton::clicked,this, &::QtWidgetsApplication2::select_file );

为什么不&QtWidgetsApplication2::select_file

::用于获取类的成员

虽然这是一个正确的假设,但它不仅限于阶级。 此运算符授予对范围的访问权限。 当它的左侧没有标识符时,它明确地告诉编译器使用全局范围来解析给定的名称。 如果我们查看 运算符优先顺序,范围解析运算符::位于列表的顶部,因此它将首先被解析,然后是运算符&地址

所以如果你要加上括号,你的代码应该读作

& ( (::QtWidgetsApplication2) ::select_file)

&::在此行中的含义是什么:

它本质上意味着最顶层的作用域(发生在最左边)是全局作用域 也就是说,我们首先从查看全局命名空间开始。


为什么不&QtWidgetsApplication2::select_file

这意味着我们首先要查看QtWidetsApplication2而不是全局命名空间。


考虑以下人为的示例

namespace P
{
    struct C
    {
        constexpr static int i = 0;
    };
}

struct C
{
    constexpr static int i = 0;
};
//-------------vvv-------->uses global class C
const int *j = &::C::i;
//-------------vv-------->uses class C in namespace P
const int *k = &P::C::i;

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM