【发布时间】:2020-08-24 23:35:54
【问题描述】:
我正在学习简单的 C++ 教程。
#include <iostream>
using namespace std;
int main()
{
int a = 1, b = 2;
cout << "Before swapping " << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
swap(a,b);
cout << endl;
cout << "After swapping " << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
void swap(int &n1, int &n2)
{
int temp;
temp = n1;
n1 = n2;
n2 = temp;
}
上面的代码可以正常工作(g++ 和 icc),但是如果我在函数中使用指针,如果我没有在程序开头包含原型,代码就会失败。
#include <iostream>
using namespace std;
void swap(int*, int*); // The code fails if I comment this line.
int main()
{
int a = 1, b = 2;
cout << "Before swapping" << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
swap(&a, &b);
cout << endl;
cout << "After swapping" << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
void swap(int* n1, int* n2)
{
int temp;
temp = *n1;
*n1 = *n2;
*n2 = temp;
}
据我所知,C++编译过程是自上而下的,所以第二段代码似乎更合理,在遇到int main()之前提供函数的信息。我的问题是,为什么在int main() 之前没有函数知识的情况下,第一个代码也能正常工作?
【问题讨论】:
-
如果您想要另一个惊喜,请从第一个示例中完全删除
swap()函数。你会发现没有它,代码也能构建和运行。 -
@MilesBudnek 啊哈!我什至没有想到
std是问题的原因。谢谢你:)