【问题标题】:Can I use nullptr as a Linux system call parameter?我可以使用 nullptr 作为 Linux 系统调用参数吗?
【发布时间】:2015-12-01 17:59:51
【问题描述】:

我正在用 C++11 在 Raspbian 上开发一个用户空间应用程序。 ReSharper++ 建议我在以下系统调用中使用nullptr 而不是NULL

auto ret = timerfd_settime(this->_timer_fd, 0, &timeout, NULL);
assert(0 == ret);

我认为我应该继续使用NULL,因为这个库专用于 C 系统编程。

在这种情况下,最佳做法是什么?

【问题讨论】:

  • NULLnullptr 在 C++ 中都是有效的空指针常量;只是nullptr 在某些情况下更安全。如果您有一个带有指针参数(可能为空)的“extern C”C 链接函数,则可以将其传递给 nullptr
  • 谢谢,这就是我的问题的答案。

标签: c++ c linux c++11 system-calls


【解决方案1】:

我会继续使用 nullptr,因为意图更明确。

对于任何类型,nullptr 都会隐式转换为指针,因此您绝对安全。

cppreference.com:

关键字 nullptr 表示指针字面量。这是一个prvalue 键入 std::nullptr_t。存在从 nullptr 到 任何指针类型的空指针值和任何指向成员类型的指针。

【讨论】:

    【解决方案2】:

    NULLnullptr 都可以正常工作。但是,由于这是 C 语言中的 syspro,我会选择 NULL,因为这是我在该领域更经常(如果不是总是)看到的。

    如果您检查系统调用的reference,您会发现到处都提到了NULL,而不是nullptr,这是您应该预料到的(如果不确定,您会阅读以下答案)。

    还要检查NULL vs nullptr

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 2018-01-18
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多