gpt4 book ai didi

c++ - 返回参数的类型名查找

转载 作者:可可西里 更新时间:2023-11-01 18:27:37 25 4
gpt4 key购买 nike

我最近被一个学生问到一个编译问题。答案很简单,但现在我正在努力寻找原因。一个简单的例子:

#include <iostream>
#include <vector>

struct MyStruct
{
typedef std::vector<int> MyIntVector;

MyIntVector CopyVector(MyIntVector const& vector);
};


MyStruct::MyIntVector MyStruct::CopyVector(MyIntVector const& vector)
^^^^^^^^
{
MyIntVector vec;
return vec;
}

int main(int /*argc*/, char** /*argv*/)
{
MyStruct st;
}

要成为有效的 C++ 代码,返回参数必须是完全合格的。这么多的答案,让编译器/学生高兴。

但是为什么返回值要用类限定而函数的参数不用呢?

我一直这样做,我知道它与 ADL 查找有关,但现在有人问我,我正在寻找更好的答案。
任何人都可以给我引用规范或提示我在哪里可以找到更多信息吗?

最佳答案

语法的结构使得返回类型独立于声明的内容,并且可以声明(但不定义)具有相同类型的多个事物。这是有效的 C++:

int f(int), g(int);

因此,具有影响类型查找的已声明对象的精确范围将是有问题的。在

id1 ns1::f(int), ns2::g(int);

在哪里查找 id1?

可以在函数定义中添加特殊规则(只能有一个函数定义——所以不会有歧义——但可以是多个对象),但我不确定这种可能性是否存在已经过检查,我认为增加的并发症不会被优势所补偿。

关于c++ - 返回参数的类型名查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5662723/

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