小编Den*_*dir的帖子

如何使用 clangd 支持为 C++ 设置 VS Code?

免责声明:我完全了解 VS Code,所以,请对我温柔一点。:-)

我正在尝试为C++设置VS Code。 但是,我明确希望对其进行设置,以便在处理 C++ 文件时使用语言服务器协议进行通信。
clangd

我已经clangd在我的 (Ubuntu Linux) 系统上安装了 VS Code 市场的官方 “vscode-clangd”扩展,我还调整了它的设置,以便它clangd可以找到它。

然而,现在我迷路了。
当我打开一个*.cpp*.hpp文件时,VS Code 向我推荐了一些其他扩展(例如支持 IntelliSense的官方 Microsoft “C/C++”扩展),但我根本看不到在哪里以及如何clangd帮助我。

使用 Microsoft 的“C/C++”扩展似乎开箱即用,但我该如何使用clangd

谢谢你的帮助。

c++ clang visual-studio-code language-server-protocol

4
推荐指数
3
解决办法
1万
查看次数

为什么 constexpr 上下文会使编译器失败,而它却无法完美优化?

我尝试了一下constexpr并发现了一些有趣的行为:

  • 在某些情况下,constexpr在函数前面添加使GCC能够尝试更努力地优化,从而导致完全优化函数并仅提供计算值。
  • 然而,从上下文中调用这样一个完全优化的函数constexpr会导致错误,因为它内部使用了未标记的constexpr(特别是)函数/内部函数(编译器内置memcpy)。
  • (当应用到这样的函数时,即使没有上下文, Clang也会直接失败。)constexprconstexpr

为什么会这样?

  • 即使在上下文中,编译器(GCC)不应该仍然能够优化吗constexpr
  • C++ 提案P0202(将其纳入 C++20)想要创建类似的函数memcpy constexpr(请参阅原始修订版中的第III.B节),但这被拒绝并更改,因为此类函数的编译器内置版本将实现相同的功能(请参阅最新修订版中的第 III.A节)。
  • 那么,GCCClang不允许memcpyconstexpr函数/上下文中使用是错误的吗?(注:memcpy__builtin_memcpy是等效的。)

为了更容易理解,这里举个例子。(您甚至可以在此处的Compiler Explorer
中更轻松地查看其结果。)

注意:我无法想出一个简单的例子,其中简单地添加constexpr到函数中就可以帮助GCC优化器完全优化,否则它不会。但相信我,我有这样的例子,它们更复杂(遗憾的是闭源)。

#include <array>
#include <cstdint>
#include <cstring>

constexpr std::uint32_t extract(const std::uint8_t* data) noexcept
{ …
Run Code Online (Sandbox Code Playgroud)

c++ g++ compiler-optimization clang++ c++20

1
推荐指数
1
解决办法
662
查看次数