You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何未被重导出的std模块仍可在导入模块m的代码中访问?

为何未重导出的std模块在导入其他模块后仍可被访问?

代码示例

module.ixx

export module m;
import std;

export namespace m {
  struct Object {
    std::string_view data() {
      return "DATA";
    }
  };
}

main.cpp

import m;

int main() {
  m::Object o;
  std::println("{}", o.data());
  return 0;
}

模块m导入了std模块,但并未通过export import std将其重导出。按照C++模块的规则,main.cpp仅导入m的情况下,理论上不应直接访问std模块的成员。

编译环境与配置

  • 编译器:Visual Studio 2026 内置MSVC 19.50.35729
  • 编译选项:
    • /std:c++latest
    • 开启一致性模式:/permissive-
    • 启用“构建ISO C++23标准库模块”

实际结果

代码编译运行后输出:

DATA

预期与异常情况

原本预期会出现类似'println': is not a member of 'std'的编译错误,但实际代码顺利编译通过。尝试过重建项目、切换Debug/Release/x64等不同配置,结果均一致。

若关闭一致性模式,会触发如下错误:

Modules conflict with non-standard behavior requested via '/Zc:twoPhase-' 

请问:为何未被重导出的std模块仍能在main.cpp中被访问?


内容的提问来源于stack exchange,提问作者sanitizedUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 14:42:28