小编Vog*_*ang的帖子

如何用`[[likely]]`注释三元表达式?

在 C++20 中,有没有办法用[[likely]]/注释三元表达式[[unlikely]]以提示编译器两种结果中的哪一种更有可能?

以下语法似乎不起作用

condition ? [[likely]] function1() : function2()
Run Code Online (Sandbox Code Playgroud)

是否有不同的语法来注释三元表达式?或者我必须使用一个if代替?

c++ c++20

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

`std::lock_guard` 用于 `std::counting_semaphore` 和 `std::binary_semaphore`

是否有任何类似于或由标准提供的 RAII 防护std::lock_guard,我可以与std::scoped_lock和结合使用?std::unique_lockstd::binary_semaphorestd::counting_semaphore

c++ semaphore locking raii c++20

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

如何在 Bazel 中强制重建包以测量构建时间

我目前正在尝试测量bazel build //api/...使用不同的--spawn_strategys构建我们的“api”项目所需的时间。我很难这样做,因为只要我不接触源文件,Bazel 就不会重建任何东西。

我能够通过编辑“api”项目中的所有文件来强制重建,但重复执行此操作很麻烦。

强制 Bazel 重建以便我可以测量存储库的构建时间的最佳方法是什么?

最好,我想使用类似bazel build //api/... --some_option_which_forces_rebuilding或类似的东西。

bazel

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

C++ 协程:从最终挂起点调用“handle.destroy”是否有效?

handle.destroy()从 C++ 协程的最终暂停中调用是否有效?

根据我的理解,这应该没问题,因为协程当前已暂停并且不会再次恢复。

尽管如此,AddressSanitizer 仍会报告heap-use-after-free以下代码片段:

#include <experimental/coroutine>
#include <iostream>

using namespace std;

struct final_awaitable {
   bool await_ready() noexcept { return false; }
   void await_resume() noexcept {}
   template<typename PROMISE> std::experimental::coroutine_handle<> await_suspend(std::experimental::coroutine_handle<PROMISE> coro) noexcept {
      coro.destroy(); // Is this valid?
      return std::experimental::noop_coroutine();
   }
};

struct task {
   struct promise_type;
   using coro_handle = std::experimental::coroutine_handle<promise_type>;

   struct promise_type {
      task get_return_object() { return {}; }
      auto initial_suspend() { return std::experimental::suspend_never(); }
      auto final_suspend() noexcept { return final_awaitable(); }
      void unhandled_exception() { …
Run Code Online (Sandbox Code Playgroud)

c++ clang address-sanitizer c++20 c++-coroutine

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

`make_unique_for_overwrite` 仍然初始化 `std::pair` 元素

我希望

auto myPairs = make_unique_for_overwrite<pair<uint64_t, void*>>[]>(arraySize);
Run Code Online (Sandbox Code Playgroud)

会给我的pairs未初始化的内存。无论如何,我稍后会覆盖它们,并且(不必要的)初始化目前对我的算法的 600 毫秒整体运行时间中的 120 毫秒负责。

避免这种初始化的最惯用的方法是什么?

c++ memory c++20

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

如何在不关闭资源的情况下留下`with`块?

我正在努力实现类似于

from tempfile import TemporaryFile

def open_head(file_path):
   with open(file_path, 'r') as f,
        TemporaryFile() as tf:
       for i in range(0,10):
           tf.write(f.read_line())
       return tf
Run Code Online (Sandbox Code Playgroud)

以便调用者获得临时文件的所有权。

特别是,我不希望该with语句关闭TemporaryFile. 但是如果在 之前出现任何问题return,我仍然希望TemporaryFilewith语句关闭。

理想情况下,我想将调用者写为

with open_head(file_path):
    # more code here
Run Code Online (Sandbox Code Playgroud)

这有可能吗?例如,通过编写return do_not_close(tf)或其他一些实用功能?

或者我是否完全错误地处理了这个问题,并且TemporaryFiles在保证异常安全的同时,还有一种更 Pythonic 的方式来返回 a或其他资源,在函数之间?

python with-statement

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