如何使用auto声明一个void指针?

时间:2017-09-01 22:39:24

标签: c++ c++11 auto

我们曾经在不使用auto的情况下声明这样的void指针。

void* ptr = nullptr;

我们应该如何使用auto做同样的事情?我们应该使用哪一个?或者还有其他更好的方法?

auto ptr = (void*)nullptr;
auto ptr = (void*)0;
  

这不是关于编码风格的问题。只是想知道如果我们需要使用auto,那应该是最好的方法。

3 个答案:

答案 0 :(得分:3)

auto ptr = static_cast<void*>(nullptr);

正如你可能知道的那样,C风格的演员阵容并不是很好,因为他们基本上会投出任何东西,而static_cast可以防止抛弃const,以及reinterpret_cast允许的疯狂东西。

答案 1 :(得分:1)

没有演员的替代品:

using void_ptr = void*;
auto ptr = void_ptr{};

auto ptr = std::add_pointer_t<void>{};

答案 2 :(得分:0)

如果您在声明过程中已经知道了类型,则 LITTLE 有理由使用auto。正如其他人所说,原始风格应该是您想要的,这样可以使您的代码简洁明了。

void* ptr = nullptr;

如果出于某种原因你要使用auto,只是出于好奇心或编码风格而不受你的控制,或者你是auto的忠实粉丝,static_cast<void*>如上所述Nir的答案是比使用C风格的转换更好的选择,后者可能会在运行时失败。

auto ptr = static_cast<void*>(nullptr);

参考