NaN Asked:2020-11-13 16:15:14 +0000 UTC2020-11-13 16:15:14 +0000 UTC 2020-11-13 16:15:14 +0000 UTC C++中函数前的双冒号 772 双冒号操作称为范围解析操作。当我们编写时::func()(运算符左侧没有任何内容),我们是否限定了全局命名空间的范围?做什么的? c++ 2 个回答 Voted Best Answer RomanMitasov 2020-11-13T16:21:47Z2020-11-13T16:21:47Z 假设您的代码在ns1其中包含函数的命名空间中工作ns1::func(),但您需要调用func()没有命名空间(在全局空间中)定义的函数。这是你需要使用的地方::func(),因为没有这个规范,编译器会调用ns1::func()你不想要的。 AnT stands with Russia 2020-11-13T16:30:47Z2020-11-13T16:30:47Z C++ 名称查找规则对于限定名称(即具有明确的类或命名空间规范)和非限定名称(没有此类指示)非常不同。如果您不喜欢非限定查找的行为,它是复杂的、多层的并且像 ADL 一样涉及很多细微差别,那么您可以通过指定限定名称来抑制这种行为。 特别是,作为一个具体示例,您可能希望调用一个::func名称被局部变量隐藏的函数int func;。
假设您的代码在
ns1其中包含函数的命名空间中工作ns1::func(),但您需要调用func()没有命名空间(在全局空间中)定义的函数。这是你需要使用的地方::func(),因为没有这个规范,编译器会调用ns1::func()你不想要的。C++ 名称查找规则对于限定名称(即具有明确的类或命名空间规范)和非限定名称(没有此类指示)非常不同。如果您不喜欢非限定查找的行为,它是复杂的、多层的并且像 ADL 一样涉及很多细微差别,那么您可以通过指定限定名称来抑制这种行为。
特别是,作为一个具体示例,您可能希望调用一个
::func名称被局部变量隐藏的函数int func;。