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)
归档时间: |
|
查看次数: |
2105 次 |
最近记录: |