最近我被学生问到编译问题.答案很简单,但现在我正在努力解决这个问题.一个简单的例子:
#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;
}
Run Code Online (Sandbox Code Playgroud)
要成为有效的c ++代码,return参数必须是完全限定的.这么多的答案,让编译器/学生高兴.
但是为什么返回值要用类和函数的参数来限定?
我总是这样做,我知道它与ADL查找有关,但现在我被问到我在寻找更好的答案.
任何人都可以给我参考规格或提示我可以找到更多信息吗?
语法的结构使得返回类型与声明的内容无关,并且可以声明(但不定义)具有相同类型的几个事物.这是有效的C++:
int f(int), g(int);
Run Code Online (Sandbox Code Playgroud)
因此,具有影响查找类型的声明对象的精确范围将是有问题的.在
id1 ns1::f(int), ns2::g(int);
Run Code Online (Sandbox Code Playgroud)
id1会在哪里查找?
可以在函数定义中添加特殊规则(可能只有一个函数定义 - 所以不会有歧义 - 但可以是几个对象),但我不确定是否已经检查过这种可能性,我认为增加的并发症不会得到优势的补偿.
| 归档时间: |
|
| 查看次数: |
1426 次 |
| 最近记录: |