我们曾经在不使用auto
的情况下声明这样的void指针。
void* ptr = nullptr;
我们应该如何使用auto
做同样的事情?我们应该使用哪一个?或者还有其他更好的方法?
auto ptr = (void*)nullptr;
auto ptr = (void*)0;
这不是关于编码风格的问题。只是想知道如果我们需要使用
auto
,那应该是最好的方法。
答案 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);
参考