C++ 20模块保证向后兼容,因此模块可以导入头。Visual Studio引入了头文件导入模块,这是标准的还是只是VS的东西?
// MyProgram.h import std.core; #ifdef DEBUG_LOGGING import std.filesystem; #endif
nlejzf6q1#
#include是一个预处理器指令,它对目标文件中的文本进行文本复制和粘贴。模块并没有改变这一点。文本复制和粘贴import指令仍然是文本复制和粘贴。所以,是的,这是标准。假设你的编译器正确地实现了它们。话虽如此,让头文件为import可能不是一个好主意。如果您想构建一个import集合,供系统中的各种文件使用,只需构建一个适当命名的模块,并获得模块构建系统的好处。可以使用export import模块。
#include
import
export import
gblwokeq2#
较新的C标准总是尽可能地保持向后兼容,以防止移植/迁移问题。但是,在移植到新标准时,可能需要更改代码。可扩展模块是C20标准中的一个新特性。任何使用C20标准构建的编译器(模块功能在C23中也可用)都允许导入模块。如果你的编译器支持C20,你需要使用开关:-fmodules-ts(C20 'import'仅在构建命令中指定'-fmodules-ts'时可用)如果编译器默认不支持C20,您可以在构建命令中指定开关:-std=c++20希望这有助于回答你的问题。
2条答案
按热度按时间nlejzf6q1#
#include
是一个预处理器指令,它对目标文件中的文本进行文本复制和粘贴。模块并没有改变这一点。文本复制和粘贴import
指令仍然是文本复制和粘贴。所以,是的,这是标准。假设你的编译器正确地实现了它们。
话虽如此,让头文件为
import
可能不是一个好主意。如果您想构建一个import
集合,供系统中的各种文件使用,只需构建一个适当命名的模块,并获得模块构建系统的好处。可以使用export import
模块。gblwokeq2#
较新的C标准总是尽可能地保持向后兼容,以防止移植/迁移问题。但是,在移植到新标准时,可能需要更改代码。
可扩展模块是C20标准中的一个新特性。任何使用C20标准构建的编译器(模块功能在C23中也可用)都允许导入模块。
如果你的编译器支持C20,你需要使用开关:-fmodules-ts(C20 'import'仅在构建命令中指定'-fmodules-ts'时可用)
如果编译器默认不支持C20,您可以在构建命令中指定开关:-std=c++20
希望这有助于回答你的问题。