fel*_*lix 31 c++ nullptr auto c++17
这个定义有效:
const auto &b{nullptr};
Run Code Online (Sandbox Code Playgroud)
虽然失败了:
auto *b{nullptr};
Run Code Online (Sandbox Code Playgroud)
我试图在Visual C++,GCC和Clang中编译它.他们都抱怨"不能推断出类型".
在第二种情况下,不b应该推断出有某种类型的std::nullptr_t?
Som*_*ude 37
这是因为你声明b是一个指针,并将其初始化为空指针.但是一个空指针指向你没有说什么类型的数据,所以编译器无法推断出类型.
如果你想b成为一个std::nullptr_t对象,你应该删除星号:
auto b{nullptr};
Run Code Online (Sandbox Code Playgroud)
Jar*_*d42 16
decltype(nullptr)是std::nullptr_t.
所以
const auto &b{nullptr}; // auto is std::nullptr_t
// b is a reference to a temporary (with lifetime extension)
Run Code Online (Sandbox Code Playgroud)
但nullptr不是指针(即使它可以转换为).
所以auto *b{nullptr};无效.
你可以改用
auto b{nullptr}; // auto is std::nullptr_t
Run Code Online (Sandbox Code Playgroud)
for*_*818 12
nullptr是类型的std::nullptr_t.因为a nullptr没有指向任何东西,所以没有相应的指针类型std::nullptr_t(nullptr因此不允许取消引用)
auto *b { nullptr};
Run Code Online (Sandbox Code Playgroud)
请求一个不存在的类型.如果你想b成为类型nullptr_t只是写
auto b { nullptr};
Run Code Online (Sandbox Code Playgroud)