gpt4 book ai didi

c++ - 在函数参数中使用限定名

转载 作者:搜寻专家 更新时间:2023-10-31 01:58:12 25 4
gpt4 key购买 nike

根据 C++ 标准,函数参数的名称由 declarator-id 解析,declarator-id 也可以是限定名称。这意味着,以下代码完全有效(如果我正确理解了标准中的相关部分):

template<class T>
struct Sample
{
int fun(int T::count); //T::count is qualified variable name
};

我的问题基本上是,为什么会有人写这样的代码?在什么情况下,使用限定名(在函数参数列表中)是有利的?


编辑:

看来我对这些部分的理解不正确。除了上面的代码,我们还可以编写以下代码(按照 C++ 标准):

template<class T>
struct sample
{
void fun(int arr[T::count]);
};

gcc-4.3.4 compiles它完美。但是,我并不完全满意,因为 T::count 不再是参数(我猜)。

最佳答案

无效。语法允许任意声明符,但 8.3.5p8 说

An identifier can optionally be provided as a parameter name; if present in a function definition (8.4), it names a parameter (sometimes called “formal argument”)

编辑 另一个在语法上限制声明符的引用(8.3p1,[dcl.meaning]):

Each declarator contains exactly one declarator-id; it names the identifier that is declared. The id-expression of a declarator-id shall be a simple identifier except for the declaration of some special functions (12.3, 12.4, 13.5) and for the declaration of template specializations or partial specializations (14.7). A declarator-id shall not be qualified except for the definition of a member function (9.3) or static data member (9.4) or nested class (9.7) outside of its class, the definition or explicit instantiation of a function, variable or class member of a namespace outside of its namespace, or the definition of a previously declared explicit specialization outside of its namespace, or the declaration of a friend function that is a member of another class or namespace (11.4).

因此在参数声明中,您不能使用限定名称。

编辑:在编辑后的形式中,函数参数类型衰减为 int*,甚至在进行测试之前是否 T::count 实际存在并且是一个整型常量。如果您想要一个示例,其中此类签名中的限定名称会做一些有意义的事情,请考虑

template<class T>
struct sample
{
void fun(int S=T::count);
};

fun 被调用时没有参数,编译器需要确定默认参数,如果 T 没有 count,编译器就会失败成员,或者无法转换为 int

关于c++ - 在函数参数中使用限定名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4417219/

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