【问题标题】:Difference between `import` and `#include`? cpp20`import`和`#include`之间的区别? cpp20
【发布时间】:2021-05-28 11:46:43
【问题描述】:

我不明白为什么

  1. 我看到了import std.core;here
  2. 我不能import std;
  3. 我不能import std.iostream;
  4. 我可以#include <iostream>

你能解释一下为什么会发生上述情况吗?也许我猜std.iostream 不是一个模块。那为什么1. 有效?

@Someprogrammerdue 提供了this 参考,它说

import <iostream>;         // import declaration

当我在编译器中运行以下操作时

import <iostream>;

int main()
{

    return 0;
}

我明白了

main.cpp:1:8: error: 'iostream' was not declared in this scope
    1 | import<iostream>;

为什么会这样?

【问题讨论】:

  • 这能回答你的问题吗? C++ include and import difference
  • @RohanBari 我知道#import 仅适用于MS。但我的问题是关于 import 没有 #
  • import 是 C++20 标准中添加的 modules 的新内容。如果您搜索例如c++ modules你也许能找到更多的信息和教程。值得注意的是,import 与预处理器 #include 指令不同(甚至相似)。

标签: c++ gcc c++20


【解决方案1】:

我不明白为什么

  1. 我看到了 import std.core;这里

您看到了您所做的,因为您阅读了该页面并且那是那里写的。

  1. 我无法导入标准;

这是因为 C++20 标准库没有定义模块。而且因为没有其他库可以(或不应该)定义模块std,因为该模块名称是为语言实现/未来标准化保留的。

  1. 我无法导入 std.iostream;

见 2。

  1. 我可以#include &lt;iostream&gt;

该头文件是 C++20 标准库的一部分。

那为什么 1. 有效?

MSVC 文档说明:

尽管 C++20 标准未指定,但 Microsoft 允许将其 C++ 标准库的实现作为模块导入。

附:在撰写本文时,所有主要编译器仅部分实现了对模块的支持,但 MSVC 除外,它似乎自 19.28 以来已完全实现(模块化标准库不是这方面的要求)。

附言模块化标准库计划用于 C++23。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2016-07-06
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多