C++ 如何使用auto声明空指针?
我们过去常常这样声明一个空指针,而不使用C++ 如何使用auto声明空指针?,c++,c++11,auto,C++,C++11,Auto,我们过去常常这样声明一个空指针,而不使用auto void* ptr = nullptr; 我们应该如何使用auto?我们应该用哪一个?或者也许还有其他更好的方法 auto ptr = (void*)nullptr; auto ptr = (void*)0; 这不是关于编码风格的问题。只是想知道如果我们需要使用auto,最好的方法应该是什么 auto ptr=static_cast(nullptr); 正如你可能知道的,C风格的类型转换并不太好,因为它们基本上可以转换任何东西,而静态类型转
auto
void* ptr = nullptr;
我们应该如何使用auto
?我们应该用哪一个?或者也许还有其他更好的方法
auto ptr = (void*)nullptr;
auto ptr = (void*)0;
这不是关于编码风格的问题。只是想知道如果我们需要使用auto
,最好的方法应该是什么
auto ptr=static_cast(nullptr);
正如你可能知道的,C风格的类型转换并不太好,因为它们基本上可以转换任何东西,而静态类型转换既可以防止扔掉常量,也可以防止疯狂的东西被重新解释 如果您在声明过程中已经知道了类型,那么使用
auto
的理由很少。正如其他人提到的,原始样式应该是您想要的,这样可以保持代码简洁明了
void* ptr = nullptr;
如果出于某种原因,您打算使用auto
,比如出于好奇或者出于无法控制的编码风格,或者您是auto
的忠实粉丝,那么Nir的答案中提到的static\u cast
将是比使用C风格转换更好的选择,后者可能会在运行时失败
auto ptr = static_cast<void*>(nullptr);
auto ptr=static_cast(nullptr);
参考
using void_ptr = void*;
auto ptr = void_ptr{};
或
auto ptr=std::add_pointer_t{};
原始版本有什么问题?@user1869785为什么。在这种情况下使用auto是过度的,也不清楚。只要坚持使用void*
@user1869785-不要对编码风格过于武断。编写“几乎总是自动”代码比编写“总是自动”代码要好。尤其是当它使代码更清晰时。需要使用auto
与某些编码风格保持一致,这只意味着你有一种需要放松的编码风格。无论如何,我对你的问题的回答是使用原版,其他两个选项都不好。等等,你的编码风格要求auto
,但允许C型强制转换?!谢谢我想这正是我想要的,不必太过深入地讨论编码风格:)请不要这样做。如果您不知道类型,如果类型可能会更改,或者如果类型太长以至于变得凌乱,则应使用Auto。在这种情况下,您知道类型,类型不会改变,void*
与指针类型一样短。@mascoj这不是讨论ops样式选择的论坛。不管怎样,我都没有强烈的感情。你可能不喜欢它,但它是C++社区中的一个合理的立场。我建议你们读一读Sutters关于几乎总是自动的文章,iirc他会在这里推荐自动(他会完全不同意你们的说法,我也是)。C风格的强制转换怎么可能“在运行时失败”?
using void_ptr = void*;
auto ptr = void_ptr{};
auto ptr = std::add_pointer_t<void>{};