gpt4 book ai didi

c++ - 关于::(scope_resolution_operator) 用法的疑问

转载 作者:行者123 更新时间:2023-11-30 02:26:15 27 4
gpt4 key购买 nike

当我在学习一本关于 C++ 的书时,我遇到了这个。如果我们声明一个类,

class student {public:
void func(int v1,int v2)
{
//some code
}
//some members.
};

并使用类外的同名函数(非成员函数),例如

void func(int x,inty)

如果我想在上面声明的类的成员函数中调用这个非成员函数,语法是,

//inside the member function...
::func(x,y);
}

如果我错了,请纠正我。否则,假设我写了

using namespace std;

在程序的开头,下面的代码和前面的代码是等价的吗?

//inside the member function
std::func(x,y);
}

而且,如果我使用 std 以外的其他命名空间,答案会改变吗?? IE,如果我使用,

using namespace abc

是以下声明

abc::func(x,y)

和,

::func(x,y)

在任何条件下都绝对等效,还是在特定条件下它们会发生变化??

谢谢。

最佳答案

in the beginning of the program, Is the below code equivalent to previous one?

//inside the member function
std::func(x,y);

不,不是。因为您执行了合格 名称查找。这意味着您可以准确指定要定义的命名空间 funcstd::func,如果它存在,仍然属于 std 命名空间,而不是全局命名空间。

using namespace 指令仅使标识符可用于未限定 名称查找,由编译器自行决定。这一点非常复杂,我知道,但这是命名空间被认为有用的原因。

关于c++ - 关于::(scope_resolution_operator) 用法的疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43066102/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com