在线C++ - IDE、编辑器、编译器、解释器

使用在浏览器中运行的Clang在线编译运行C++20代码:STL容器、算法、iostream和stdin输入。无需注册,不会上传任何内容。

C++20 (Clang 21, WebAssembly) · 在浏览器中运行,代码绝不会发送到我们的服务器。
main.cppC++
输出

            
输入(stdin),由 scanf / std::cin / getline 读取
Ctrl/⌘ + Enter 运行

在线 C++ 编译器的功能(IDE、编辑器 & 解释器)

免费在线编写、运行和测试 C++ 代码。本页面集在线 C++ IDE、代码编辑器、编译器和解释器于一体:输入代码,点击“运行”,立即查看输出。一切都在浏览器中运行,无需安装,也无需注册账号。

  • 即时运行代码: C++20 (Clang 21, WebAssembly),首次加载后一秒内即可输出结果。
  • 代码编辑器: 语法高亮、行号、括号匹配和自动补全括号。
  • 程序输入(stdin): 在运行前输入程序要读取的内容。
  • 清晰的错误提示: 错误信息和警告会显示在输出面板中,与在您自己的电脑上一样。
  • 全屏: Ctrl/⌘ + Shift + F,可调节字号,支持并排或堆叠布局,面板大小可调。
  • 自动保存: 代码保存在您的浏览器中;可一键下载为 main.cpp 或复制。
  • 放心尝试: 时间限制和“停止”按钮可终止无限循环。
  • 私密: C++ 运行时在您的设备上运行,代码绝不会被上传。
  • 深色模式 以及键盘快捷键:Ctrl/⌘ + Enter 运行代码。
  • 免费: 无需注册,不限使用次数。

学习其他编程语言

在线 C++ 编译器怎么用

  1. 在编辑器中输入或粘贴 C++ 代码。代码中需要有 int main()。重置示例可恢复初始示例程序。
  2. 如果您的程序要从 std::cin 或 std::getline 读取数据,请先把输入内容填入输入(stdin)框。
  3. 按运行,或按 Ctrl + Enter(Mac 上为 ⌘ + Enter)。页面会编译 main.cpp,显示所有诊断信息,然后运行程序。
  4. 选择 5、15 或 60 秒的时间限制。运行超时后程序会被终止。按停止可立即结束运行。

首次运行时,页面会下载约 30 MB 的 Clang 工具链,之后由浏览器缓存。此后编译一个普通程序用时远不到一秒。复制和 main.cpp 可以帮您保存代码,A−/A+ 调整文字大小,布局按钮可在左右并排和上下堆叠两种窗格之间切换,全屏(Ctrl/⌘ + Shift + F,按 Esc 退出)则让编辑器占满整个窗口。

不会上传任何内容。编译器和您的程序都在您的浏览器中运行,您最新的代码只保存在浏览器的本地存储中。

支持哪些功能

本页面使用真正的 Clang/LLVM 21 编译器,由 YoWASP 项目构建为 WebAssembly 版本。它把您的源代码编译成由浏览器执行的 WebAssembly(WASI)程序。实际执行的命令等同于:

clang++ main.cpp -std=c++20 -O2 -Wall -fno-exceptions -o main.wasm
  • C++20:auto、lambda 表达式、基于范围的 for、结构化绑定、constexpr、概念(concepts)和指定初始化器。
  • 来自 libc++ 的标准库:vector、string、map、unordered_map、set、algorithm、numeric、iostream、sstream、iomanip、optional 以及其余容器和算法。
  • Clang 自身的诊断信息,完全按照编译器的报告输出,带有 main.cpp:line:column 位置,包括模板错误和 -Wall 警告。
  • main 返回非零值时,会显示为 进程已退出,退出码 N。

为什么关闭了异常

C++ 异常在 WebAssembly 中需要额外的运行时支持,而这个浏览器内的工具链并不提供,因此代码使用 -fno-exceptions 编译。所以,不支持 try、throw 和 catch,使用它们的代码会编译失败。通常会抛出异常的库函数,例如对无效输入调用 std::stoi,或用越界索引调用 .at(),在这里也无法捕获。请在转换前先检查输入,用 size() 检查索引,或返回 std::optional 来表示失败:

#include <optional>
#include <string>

std::optional<int> parse(const std::string& s) {
    if (s.empty()) return std::nullopt;
    int v = 0;
    for (char c : s) {
        if (c < '0' || c > '9') return std::nullopt;
        v = v * 10 + (c - '0');
    }
    return v;
}

其他限制

  • 不支持线程:std::thread、std::async 和 pthreads 均不可用。
  • 没有网络,不支持 fork/exec,也没有真正的文件系统,所以 std::ifstream 无法读取您电脑上的文件。请改用 stdin。
  • 不支持图形或 GUI 库,例如 Qt、SFML 或 OpenGL。只能输出文本。
  • 没有安装 Boost 等第三方库。所有代码都必须写在单个 main.cpp 文件中。

几行代码看现代 C++

初始示例程序展示了让现代 C++ 比老式教科书代码更简洁的写法:

std::map<std::string, int> ages{ {"Ada", 36}, {"Linus", 54} };
for (const auto& [name, age] : ages)      // structured bindings
    std::cout << name << " is " << age << '\n';

std::vector<int> v{5, 3, 9, 1};
std::sort(v.begin(), v.end(), std::greater<>());
auto evens = std::count_if(v.begin(), v.end(), [](int x) { return x % 2 == 0; });
  • 在循环中优先使用 '\n' 而不是 std::endl。endl 还会刷新输出流,速度更慢。
  • 混用 std::cin >> n 和 std::getline 时,请先调用 std::cin.ignore(),否则 getline 会把上一行剩下的部分读成空字符串。
  • 对 std::map 使用 operator[] 时,如果键不存在,会插入一个默认值。要在不改变 map 的情况下查找键,请用 find 或 contains(C++20)。

常见问题

使用哪个 C++ 标准?

C++20,由 Clang 21 以 -O2 -Wall 编译。为 C++11、C++14 或 C++17 编写的代码也能编译。

为什么带 try/catch 的代码无法编译?

异常已通过 -fno-exceptions 禁用。请改用返回值、std::optional,或在有风险的操作之前进行显式检查。

可以使用 bits/stdc++.h 吗?

不可以。这个头文件是 GCC 特有的,libc++ 中没有。请包含您需要的标准头文件,例如 <iostream>、<vector> 和 <algorithm>。

有纯 C 版本吗?

有,C语言在线编译器使用同样的 Clang,以 C17 模式编译。您也可以浏览本站所有在线编译器。

更新于

评论

暂无评分

登录后即可为此工具评分。

分享技巧、提出问题,或说说这个工具对您是否有用。

还没有评论,来分享您的使用体验吧。

已复制到剪贴板