"::'variable'"指的是什么?
what does "::'variable'" refer to?
:I 在下面的程序中是什么意思?
#include<iostream>
using namespace std;
int i = 10;
int main(){
int i = 20;
{
int i = 30;
cout << i << ::i <<endl;
}
}
它输出"3010"。"::i"似乎指的是《全球宣言》。这到底是什么意思?
它被称为限定名称查找。
它引用在全局范围内声明的变量i
。
简单地说,这意味着不要引用局部变量i
如果有的话,而是引用全局范围内的i
。
每当局部作用域中具有相同的命名变量时,当引用变量名称时,将优先选择局部作用域中的变量。这意味着在你的程序中,局部范围内的i
{
}
隐藏了所有其他名为i
变量,即 ones(i=20
和 i=10
(。因此,要引用全局范围内的i
,请使用::
范围解析运算符。
::
开头的变量和函数描述此变量或函数位于全局命名空间中(不是局部(。在您的示例中,i
表示在第 7 行定义的局部变量,::i
表示在第 3 行定义的全局变量。但是i
不是指在第 5 行定义的外部局部变量,因为它在该范围内(第 6 行到第 9 行(被重新定义且无法访问。
::
运算符是范围解析运算符。当你写scopename::name
时,这意味着你指的是对象/函数/...命名name
到范围scopename
(通常是命名空间(中;例如,如果您没有编写using namespace std;
以使用cin
/cout
/...你必须写std::cin
/std::cout
/...
如果范围解析运算符前面没有范围名称,则意味着你显式引用放入全局命名空间的对象,因为全局i
在程序中。
如果当前已导入多个命名空间(使用 using namespace
指令(或具有隐藏全局命名空间的本地名称,则此功能特别有用。在您的代码中,这正是发生的情况:本地i
"隐藏"全局,您需要::
才能访问全局i
。
随机提示:当您处理 C 库(没有命名空间的概念(时,您经常会看到::
用于引用全局标识符,并且您希望确保调用特定的 C 函数而不是将其隐藏在当前作用域中的某种C++方法(这在想要调用 Windows API 的 MFC 代码中经常发生(。
i
全局命名空间。
{
int i = 30;
cout << i << ::i <<endl;
// 1. First i refers to the block scoped i having value 30
// 2. ::i refers to the global variable i having the value 10
}
>::i
是指全局命名空间中的i
。
它只是一个范围运算符。它通常用于命名空间。
::i
引用全局变量。
::
用于全局命名空间。所以::i
表示变量i
全局命名空间中声明的。
::i
表示搜索未嵌套在任何内容中的i
。在您的情况下,这将引用i=10;
另请参阅 c/c++ 搜索通配符和语法。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- "using namespace std;"在C++的作用是什么?
- 包含通过引用捕获的 lambda 函数的"variable"的类型是什么?
- "Do not change a loop variable inside a for loop block"的意义是什么?
- C++ 中的" Variable ' i ' was not declared in scope "是什么?
- "variable"的定义是什么?
- "::'variable'"指的是什么?
- "variable|variable" C++是什么意思?