C++代码中数组add[i]前的::运算符具体含义是什么?
C++中::运算符的作用解答
你代码中的场景说明
你贴出的代码里::add[i]的::是作用域解析运算符,单独使用(无前置命名空间/类名)时的作用是强制访问全局作用域下的标识符:
- 你的for循环内部先定义了一个局部double类型变量
add,此时如果直接写add[i],编译器会优先匹配当前作用域下的这个double类型的局部add,它是标量不是数组,会直接编译报错。 - 加
::前缀就是告诉编译器,此处要调用的是在全局作用域中定义的、名为add的数组,避开局部重名变量的干扰。
该运算符的通用作用
C++中::作用域解析运算符主要有两类使用场景:
- 无前置前缀的
::标识符:显式指定访问全局命名空间下的标识符,专门用来解决局部作用域和全局作用域标识符重名的冲突问题。 - 带前置前缀的
前缀::标识符:- 前缀为命名空间时:指定访问对应命名空间下的成员,比如
std::cout就是访问标准命名空间std下的cout对象。 - 前缀为类名时:指定访问类的静态成员,或者用于类外定义类的成员函数。
- 前缀为命名空间时:指定访问对应命名空间下的成员,比如
附最小测试样例方便理解:
#include <iostream> using namespace std; int val = 100; // 全局变量val int main() { int val = 10; // 局部变量val,和全局重名 cout << val << endl; // 输出10,优先匹配局部变量 cout << ::val << endl; // 输出100,显式匹配全局变量 return 0; }
内容的提问来源于stack exchange,提问作者FSI
相关产品推荐
相关产品推荐

