Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我忘了这叫什么了?_C++_Namespaces_Scope - Fatal编程技术网

C++ 我忘了这叫什么了?

C++ 我忘了这叫什么了?,c++,namespaces,scope,C++,Namespaces,Scope,好的,我有这段代码,我知道这不是好的编程实践。我只是忘了它叫什么了 int main() { int variable; { int variable; } } 这是本地名称空间还是什么?我就是记不起这样做的正确术语。我称之为范围。我想其他人也这么称呼它。我会称之为范围。我想其他人也这么叫它。这个{…}是一个块或复合语句,它创建了一个嵌套的作用域。(它不是命名空间) 这种特殊情况下,内部作用域中的声明与外部作用域中的声明同名(因此隐藏),有时称为隐藏

好的,我有这段代码,我知道这不是好的编程实践。我只是忘了它叫什么了

int main()
{
    int variable; 
    {
        int variable;
    }
}

这是本地名称空间还是什么?我就是记不起这样做的正确术语。

我称之为范围。我想其他人也这么称呼它。

我会称之为范围。我想其他人也这么叫它。

这个
{…}
是一个块或复合语句,它创建了一个嵌套的作用域。(它不是
命名空间

这种特殊情况下,内部作用域中的声明与外部作用域中的声明同名(因此隐藏),有时称为隐藏

g++可以对此发出警告。引述:

`-Wshadow'
每当局部变量或类型声明隐藏另一个时发出警告
变量、参数、类型或类成员(在C++中),或
内置函数被隐藏。注意,在C++中,编译器将
如果局部变量遮挡结构/类/枚举,则不会发出警告,但会
如果它对显式typedef进行阴影处理,则发出警告。

(正如Adam Rosenfield在评论中指出的,
-Wshadow
不是由
-Wall
-Wextra
-pedantic
启用的;您必须明确地启用它。)

{…}
是一个块或复合语句,它创建了一个嵌套的范围。(它不是
命名空间

这种特殊情况下,内部作用域中的声明与外部作用域中的声明同名(因此隐藏),有时称为隐藏

g++可以对此发出警告。引述:

`-Wshadow'
每当局部变量或类型声明隐藏另一个时发出警告
变量、参数、类型或类成员(在C++中),或
内置函数被隐藏。注意,在C++中,编译器将
如果局部变量遮挡结构/类/枚举,则不会发出警告,但会
如果它对显式typedef进行阴影处理,则发出警告。
(正如Adam Rosenfield在评论中指出的,
-Wshadow
不是由
-Wall
-Wextra
-pedantic
启用的;您必须明确启用它。)

您正在隐藏一个现有变量。这不是好的编程实践

出于兴趣,Java禁止它。

您正在隐藏现有变量。这不是好的编程实践


出于兴趣,Java禁止使用它。

我认为您所指的是变量隐藏或变量阴影。通过在内部作用域中声明与外部作用域同名的变量,可以对内部作用域隐藏外部变量。显然,在更复杂的代码中,这可能会令人困惑


我想你指的是变量隐藏,或者变量阴影。通过在内部作用域中声明与外部作用域同名的变量,可以对内部作用域隐藏外部变量。显然,在更复杂的代码中,这可能会令人困惑


这里有两个概念,一个是在
{…}
中创建
块范围
,另一个是在该块范围内隐藏
变量的外部实例。块范围是由复合语句(或块)创建的,如果我们看C++草稿标准部分<代码> 6.3代码>复合语句或块段落1,则有以下语法:

compound-statement:
  { statement-seqopt}
它还说:

复合语句定义块范围(3.3)

如果我们看一下第3.3.3节,第1段说:

块(6.3)中声明的名称是该块的本地名称;它具有块范围。其潜在范围从其声明点(3.3.2)开始,并在其块的末尾结束。在块范围内声明的变量是局部变量


因此,
变量
的情况是,内部块中的本地副本在外部块中隐藏了
变量的实例,因为它具有相同的名称。

这里有两个概念,一个是在
{…}中创建
块范围
并且您正在该块范围内隐藏
变量的外部实例。块范围是由复合语句(或块)创建的,如果我们看C++草稿标准部分<代码> 6.3代码>复合语句或块段落1,则有以下语法:

compound-statement:
  { statement-seqopt}
它还说:

复合语句定义块范围(3.3)

如果我们看一下第3.3.3节,第1段说:

块(6.3)中声明的名称是该块的本地名称;它具有块范围。其潜在范围从其声明点(3.3.2)开始,并在其块的末尾结束。在块范围内声明的变量是局部变量


因此,
variable
的情况是,内部块中的本地副本将
变量的实例隐藏在外部块中,因为它具有相同的名称。

它被简单地称为变量的作用域。c允许我们定义相同的变量名称。

它被简单地称为变量的作用域。c允许我们定义相同的名称变量。

它只是一个内部代码块。@FatalError+1表示您的注释(link+sig)的读取方式:)它只是一个内部代码块。@FatalError+1表示您的注释(link+sig)的读取方式:)您只能在另一个变量位于全局命名空间中时执行该操作。@Bathsheba:真的吗?所以你声称
名称空间Foo{int i;void Bar(){int i;}}
是不可能的;不,自那以后,答案已被编辑。回答者说了一些关于使用::。只有当另一个变量在全局名称空间中时,你才能这样做。@Bathsheba:真的吗?所以你声称
名称空间Foo{int i;void Bar(){int i;}}
是不可能的;不,自那以后,答案已被编辑。回答者说了一些关于