gpt4 book ai didi

c++ - 3.4.1/6 是否忽略了在函数的参数声明子句中找到的函数中使用的名称的查找?

转载 作者:行者123 更新时间:2023-11-28 06:23:03 26 4
gpt4 key购买 nike

3.4.1/6:

A name used in the definition of a function following the function’s declarator-id28 that is a member of namespace N (where, only for the purpose of exposition, N could represent the global scope) shall be declared before its use in the block in which it is used or in one of its enclosing blocks (6.3) or, shall be declared before its use in namespace N or, if N is a nested namespace, shall be declared before its use in one of N’s enclosing namespaces.

[ Example:

namespace A {  
namespace N {
void f();
}
}

void A::N::f() {
i = 5;

// The following scopes are searched for a declaration of i:
// 1) outermost block scope of A::N::f, before the use of i
// 2) scope of namespace N
// 3) scope of namespace A
// 4) global scope, before the definition of A::N::f
}

我相信 3.4.1/6 忽略了在函数的 parameter-declaration-clause 中找到的 function-body 中使用的名称的查找,如图所示下面:

void f(int i) { std::cout << i << '\n'; }

最佳答案

该段与您的示例无关,因为在您的示例中 i不是“作为命名空间 N 成员的名称 [...]”

句子的开头应该这样解析:

设 F 为一​​个函数。
令 N 为命名空间。
设 X 为名称。

如果在 F 的 declarator-id 之后在 F 的定义中使用 X,并且 X 是命名空间 N 的成员 ...

<罢工>

编辑:我被我上面的解释是错误的评论说服了。我创建了 https://github.com/cplusplus/draft/issues/451要求重新措辞该段。

但是这也是错误的:

I believe 3.4.1/6 ignores the lookup of a name used in a function-body that is found in the function's parameter-declaration-clause,

首先,显然i 通过名称查找找到的,否则函数参数将无法使用!

其次,3.3.3 [basic.scope.block]/2 说 i具有从声明点开始到函数定义的右大括号结束的“ block 范围”。 3.4.6/6 说“应在使用它的 block 中使用之前声明”,在这种情况下是正确的。 i在使用之前声明(它的声明点在使用之前)并且在使用它的 block 中声明(函数的最外层 block 作用域)。

关于c++ - 3.4.1/6 是否忽略了在函数的参数声明子句中找到的函数中使用的名称的查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29019462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com