免责声明:我完全了解 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?
谢谢你的帮助。
我尝试了一下constexpr并发现了一些有趣的行为:
constexpr在函数前面添加使GCC能够尝试更努力地优化,从而导致完全优化函数并仅提供计算值。constexpr会导致错误,因为它内部使用了未标记的constexpr(特别是)函数/内部函数(编译器内置memcpy)。constexprconstexpr为什么会这样?
constexpr?memcpy constexpr(请参阅原始修订版中的第III.B节),但这被拒绝并更改,因为此类函数的编译器内置版本将实现相同的功能(请参阅最新修订版中的第 III.A节)。memcpy在constexpr函数/上下文中使用是错误的吗?(注: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)