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;}}
是不可能的;不,自那以后,答案已被编辑。回答者说了一些关于