gpt4 book ai didi

c++ - 文件之间的链接 - 它究竟是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 02:41:55 24 4
gpt4 key购买 nike

所以我一直在阅读有关此内容的内容,但找不到任何可以向我解释以下代码行为的内容: header .hpp:

class TESTING{
private:
int num;

public:
TESTING(int);
};

void testing(int, int);

def.cpp:

#include "header.hpp"
#include <iostream>

using namespace std;

TESTING::TESTING(int num = 100){
this->num = num;
cout << "init with: " << this->num << endl;
}

void testing(int a = 500, int b = 200){
cout << "a: " << a << ", b: " << b << endl;
}

int main(){
TESTING test1;
TESTING test2(5);
testing();
testing(1);
testing(1, 2);
}

到目前为止一切顺利,按预期工作,输出结果是:
初始化:100
初始化:5
a: 500, b: 200
a: 1, b: 200
a: 1, b: 2

但是当我剪切“int main”函数并将其粘贴到下面的 Main.cpp 中时

主要.cpp:

#include "header.hpp"

int main(){
//TESTING test1;//error: assumed to be default constructor
TESTING test2(5);
//testing();//error: too few arguments
//testing(1);//error: too few arguments
testing(1, 2);
}

我会得到上面评论中提到的错误,但仍然是输出:
初始化:5
a: 1, b: 2

这意味着它确实将自身链接到 def.cpp,但具有某种最小可见性(?)。
为什么会这样?
这个 Main.cpp 文件的目的是让 main 函数运行该项目中的所有其他 c++ 文件,是否有通用比我试过?如果是这样,这种方式是否适用于此处提到的代码?还是我的代码写得不好?

P.S: 我是 c++ 的新手,请保持温柔 :d

最佳答案

默认参数不会神奇地跨源文件传输。想一想 - 编译器处理 main.cpp 应该如何知道,在不同的源文件中,您为某些参数提供了默认参数?

形式上,默认参数特定于任何给定范围:

8.3.6/4 For non-template functions, default arguments can be added in later declarations of a function in the same scope. Declarations in different scopes have completely distinct sets of default arguments...

即使在同一个源文件中,您也可以在不同的范围内声明同一个函数具有不同的默认参数。编译器会很乐意替换当前范围内可见的声明指定的任何默认参数(如果有的话)。


顺便说一句,“链接”这个词是一个专业术语——它在 C++ 中有非常具体的含义。这种联系的概念在很大程度上与您的问题无关,至少就它与默认参数有关而言(我只是为了读者的利益而指出它,他们可能会对问题的标题感到困惑)。默认参数集不是函数名称或签名的一部分,不会影响它的链接,也不会影响它跨作用域和翻译单元使用的能力。

关于c++ - 文件之间的链接 - 它究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27594710/

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