Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否需要在A.H和.CPP文件中分离C++结构? 我进入C++宇宙,这个疑惑就来了。< /P>_C++_C++11_Compilation - Fatal编程技术网

是否需要在A.H和.CPP文件中分离C++结构? 我进入C++宇宙,这个疑惑就来了。< /P>

是否需要在A.H和.CPP文件中分离C++结构? 我进入C++宇宙,这个疑惑就来了。< /P>,c++,c++11,compilation,C++,C++11,Compilation,对于我选择包含在我的程序中的每个意义单元,有两个文件太无聊了。 我知道在同一对归档文件中可以有多个类,但是我想澄清一下,是否真的没有办法只编写一个文件,而不是a.h和a.cpp文件 我还发现了一些其他的答案,比如,实际上有相当详细的解释,但也有一个相当古老的答案。因此,语言有了一些改进,我来问: 是否有一些编译选项、任何其他替代扩展名或其他任何东西允许我只编写一个文件 我很感激 好的,你需要了解发生了什么。这不是Java .h文件是类的定义。它只是一个包含文件,可以在其他地方使用,以便其他地方理

对于我选择包含在我的程序中的每个意义单元,有两个文件太无聊了。 我知道在同一对归档文件中可以有多个类,但是我想澄清一下,是否真的没有办法只编写一个文件,而不是a.h和a.cpp文件

我还发现了一些其他的答案,比如,实际上有相当详细的解释,但也有一个相当古老的答案。因此,语言有了一些改进,我来问:

是否有一些编译选项、任何其他替代扩展名或其他任何东西允许我只编写一个文件


我很感激

好的,你需要了解发生了什么。这不是Java

.h文件是类的定义。它只是一个包含文件,可以在其他地方使用,以便其他地方理解您的类。现在,您实际上可以内联执行构造函数,如下所示:

public:
     Foo() { ... your code here ... }
这是完全合法的。但问题很简单。无论您在何处使用此构造函数,编译器都必须内联插入该代码。这将导致在创建新Foo的任何地方都有大量相同的代码

如果将代码放入.cpp文件中,然后对其进行编译,则会得到一个.o文件。该.o文件包含构造函数的一个副本,这就是在创建Foo的任何地方都会调用的内容

因此,将定义与代码分离会产生更小的程序。现在这比过去不那么重要了

这是C++的本质,你应该接受它。


h是一个包含文件,用于其他地方。.cpp就是实现。这其实并不繁重,一旦你习惯了。

好的,你需要了解发生了什么。这不是Java

.h文件是类的定义。它只是一个包含文件,可以在其他地方使用,以便其他地方理解您的类。现在,您实际上可以内联执行构造函数,如下所示:

public:
     Foo() { ... your code here ... }
这是完全合法的。但问题很简单。无论您在何处使用此构造函数,编译器都必须内联插入该代码。这将导致在创建新Foo的任何地方都有大量相同的代码

如果将代码放入.cpp文件中,然后对其进行编译,则会得到一个.o文件。该.o文件包含构造函数的一个副本,这就是在创建Foo的任何地方都会调用的内容

因此,将定义与代码分离会产生更小的程序。现在这比过去不那么重要了

这是C++的本质,你应该接受它。


h是一个包含文件,用于其他地方。.cpp就是实现。一旦你习惯了,这就不是很麻烦了。

< P>你必须理解C++是一种编译语言。例如,编译库时,该库包含特定于机器的代码。如果您想编写一个使用该库的程序,您的程序必须能够看到函数和类定义,才能正确链接该库。另一方面,完全有可能在头文件中编写整个程序——事实上,术语仅头库用于描述没有预编译机器代码的库。这意味着编写它的责任落在你身上。您可能会有更长的编译时间,正因为如此,非常大的库几乎完全预编译成特定于平台的二进制文件。如果您的机器没有一组二进制文件,那么您必须从源代码进行编译,并根据结果进行链接。理论上,可以以这样的方式重写C++规范,但只有那些文件需要存在于包含该库的任何项目中。对于非常大的库来说,这可能是一个难题——当您可以只包含链接到二进制文件所需的定义时,为什么还要包含某些引擎的完整源代码?这提供了混淆客户端程序中的算法和实现细节的额外优势。C++不是一种解释的编程语言——从编译器的角度考虑它是很重要的。<你必须理解C++是一种编译语言。例如,编译库时,该库包含特定于机器的代码。如果您想编写一个使用该库的程序,您的程序必须能够看到函数和类定义,才能正确链接该库。另一方面,完全有可能在头文件中编写整个程序——事实上,术语仅头库用于描述没有预编译机器代码的库。这意味着编写它的责任落在你身上。您可能会有更长的编译时间,因此,非常大的库几乎完全预编译为特定于平台的二进制文件,如果您的机器没有一组二进制文件,您必须
从源代码编译并根据结果链接。理论上,可以以这样的方式重写C++规范,但只有那些文件需要存在于包含该库的任何项目中。对于非常大的库来说,这可能是一个难题——当您可以只包含链接到二进制文件所需的定义时,为什么还要包含某些引擎的完整源代码?这提供了混淆客户端程序中的算法和实现细节的额外优势。C++不是一种解释的编程语言——从编译器的角度考虑它是很重要的。 不,目前还没有合适的方法-模块。他们发现更重要的东西要添加到语言中,而不是修复过时且相当糟糕的技术-预处理器。这不是必需的,您可以将所有内容都放在single.h或single.cpp中,但这只是不方便而已。没有,目前还没有合适的方法-模块。他们发现了更重要的东西要添加到语言中,而不是修复过时且相当糟糕的技术-预处理器。这不是必需的,您可以将所有内容都放在single.h或single.cpp中,但这很不方便每次遇到此构造函数时,编译器都必须内联插入代码。你能支持吗?内联实际上并不意味着内联代码,它意味着忽略重复的定义。我想更精确一些,但不想让答案更冗长。这是C++的新程序员,我不想一下子加太多。是的,每个.o文件可能会有一份副本。没错。但这可能仍然有很多副本。虽然.o文件将有一个副本,但最终的可执行文件不会有这些副本,因为链接器会将它们合并为一个副本。无论您在何处使用此构造函数,编译器都必须内联插入该代码。你能支持吗?内联实际上并不意味着内联代码,它意味着忽略重复的定义。我想更精确一些,但不想让答案更冗长。这是C++的新程序员,我不想一下子加太多。是的,每个.o文件可能会有一份副本。没错。虽然.o文件会有一个副本,但最终的可执行文件不会有这些副本,因为链接器会将它们合并成一个副本。