[英]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.