CLion 2025.2 Help

支持 C++20 Concepts

ConceptsC++20 标准中的主要语言特性之一。 它们提供了一种对模板参数施加编译时约束的方法,帮助您确保模板符合您的预期。

配置 Concepts 支持

1. 设置编译器

  1. 您使用的编译器应支持 C++20 Concepts 特性。

    • 使用 Clang10 或更高版本。 您可以在 C++ Support in Clang 中检查特定 C++20 特性的状态。

    使用 GCC 10 或更高版本。 GCC10 中的 Concepts 实现完全 符合 C++20

    MSVC 自 Visual Studio 16.3 版本起支持 Concepts。 请注意,简洁语法(void fn(MyConcept auto mc) )尚不支持。

    可能需要添加 #define __cpp_lib_concepts 以正确解析(请参阅 Microsoft announcement 的评论)。

2. 将项目标准设置为 C++20

CMake 项目

  • 创建新项目时,在新建项目向导的 语言标准 字段中选择 C++20

  • 对于现有项目,在 CMakeLists.txt 的开头设置 CMAKE_CXX_STANDARD 变量:

    set(CMAKE_CXX_STANDARD 20)

Makefile 项目

在 Makefile 中设置 CXXFLAGS 变量:

CXXFLAGS += -std=c++20

Meson 项目

设置 cpp_std 编译器选项:

cpp_std=c++20

3. 确保启用了 Clangd 补全

默认情况下,CLion 的代码补全由 基于 Clangd 的引擎 执行。 在使用 Concepts 时,使用默认选项 仅 Clangd 补全 或切换到 Clangd 补全与内置功能合并

  1. 转到 设置 | 语言与框架 | C/C++ | Clangd

  2. 代码补全 部分中,设置 通过 clangd 使用代码补全 复选框:

    Clangd 补全选项

Concepts 的代码洞察

解析和高亮

CLion 解析并高亮显示所有标准语法形式的 conceptrequires

支持的 Concepts 语法形式

您可以在 设置 | 编辑器 | 配色方案 | C/C++ | 模板 | 概念 中调整 Concepts 的高亮设置。 默认情况下,方案继承自 C/C++ 类/结构体/枚举/联合体

Concepts 的语法高亮设置

代码分析

一组带有快速修复的 检查 可用于使用 Concepts 的代码。

在这些检查中,一些检查来自编译器:

Concepts 编译器检查示例

CLion 为 Concepts 提供了两个专用检查, 未使用的概念无约束的变量类型。 您可以在 设置 | 编辑器 | 检查 | C/C++ 中配置它们:

Concepts 的检查

Concepts 也包含在所有相关的 未使用代码 检查中,例如 未使用的 include 指令

未约束的变量类型 检查建议对声明为 auto 的局部变量进行约束,如果将受约束表达式或函数调用的结果赋值给它们。 此检查在 Windows 上默认禁用。

未约束的变量类型

代码补全、导航和重构

Concepts 的代码补全在以下情况下可用:

  • 对受约束的模板类型参数的补全:

    约束类型的补全
  • 对由 std::is_base_of<MyBase, T>std::is_same<Other, T> 约束的类型的补全。

    Tstd::is_base_of<MyBase, T>std::is_same<Other, T> 中的建议列表分别包括来自 MyBaseOther 的选项:

    由 std::is_base_of 和 std::is_same 约束的类型的补全

    请注意,此情况下的补全仅在 MyBaseOther 是具体类型(而非模板类型)时有效。

重命名重构和导航操作(如 转到定义查找用法 )也支持带有 Concepts 的代码。

最后修改日期: 2025年 9月 26日