[[nodiscard]] C++17

[[nodiscard]] 属性详解

1. 基本概念

[[nodiscard]] 是 C++17 引入的一个属性(attribute),用来标记不应该被忽略的返回值

2. 作用

  • 当函数的返回值被忽略时,编译器会发出警告
  • 帮助防止程序员意外丢弃重要的返回值
  • 提高代码的安全性和可靠性

3. 使用场景

3.1 普通函数示例

// 编译器会警告如果返回值被忽略
[[nodiscard]] int getValue() {
    return 42;
}

int main() {
    getValue();  // 警告:返回值被忽略
    int x = getValue();  // 正确:返回值被使用
}

3.2 在 IsolateManager 中的用法

template <typename Runnable>
[[nodiscard]] auto Run(Runnable runnable)
    -> typename IsolateTask<Runnable>::FutureType;

// 错误用法(会收到警告):
manager.Run(task);  // 警告:future 被忽略!

// 正确用法:
auto future = manager.Run(task);  // 正确:保存了 future

4. 为什么在 IsolateManager 中使用?

  • Run 方法返回一个 future(未来值)
  • 这个 future 用于获取任务的执行结果
  • 如果忽略这个返回值,就无法知道任务是否完成
  • 也无法获取任务的执行结果

5. 实际例子

IsolateManager manager(platform);

// 错误示例 ❌
manager.Run([](v8::Isolate* isolate) {
    return "结果";
});  // 编译警告:忽略了返回的 future

// 正确示例 ✅
auto future = manager.Run([](v8::Isolate* isolate) {
    return "结果";
});
auto result = future.get();  // 获取结果

简单来说,`[[nodiscard]]` 就是告诉编译器:"嘿,这个返回值很重要,不能随便丢弃!如果有人忽略了这个返回值,请发出警告。"

这在异步编程中特别重要,因为如果忽略了 future,就可能导致任务的结果永远无法获取,或者任务的完成状态无法追踪。
posted @ 2025-04-18 14:59  AngDH  阅读(130)  评论(0)    收藏  举报