最近有一个学生问我一个编译问题。答案很简单,但现在我正在努力寻找原因。
一个简单的例子:
#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 会在哪里查找?
人们可以在函数定义中添加特殊的规则(只能有一个函数定义——所以不会有歧义——但可以是多个对象),但我不确定是否已经检查过这种可能性,而且我认为增加的复杂性不会被优势所补偿。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)