c++ - `auto* p = &n` 和 `auto p = &n` 之间有什么区别吗?

标签 c++ c++11 syntax coding-style auto

#include <type_traits>

int main()
{
    int n;

    auto* p1 = &n;
    auto  p2 = &n;

    static_assert(std::is_same_v<decltype(p1), decltype(p2)>); // ok
}

auto* p = &nauto p = &n 之间有什么区别吗?或者只是编码风格问题?

最佳答案

Any difference between auto* p = &n and auto p = &n? or just a coding style issue?

在您的示例中,其中 nint,区别在于编码风格。

但是,如果nstructclass类型的实例,则提供一元operator&(),那么就有区别了。如果重载的 operator& 返回任何非指针类型,auto *p = &n 将被诊断为错误。仅当 operator&() 返回 void 时,auto p = &n 才会被诊断为错误。如果后续代码依赖 &n 提供指针,这可能很有用(从某种意义上说,编译器最好尽早诊断问题)。

诚然,重载operator&()是一种相对罕见(且有风险)的用例,并且重载返回非指针类型的情况相当罕见。然而,给出了现实世界的例子 herehere .

关于c++ - `auto* p = &n` 和 `auto p = &n` 之间有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61289179/

相关文章:

c++ - 如何在 C++ 中使用引用参数?

c++ - 并发引用计数器类和作用域保留 : is this ok?

c++ - 如何更好地分配这个数组?

C++局部变量销毁顺序

C++ 编译时宏来检测 Windows 操作系统

c++ - noexcept 和模板可能存在的 g++ 错误

c++ - 有没有办法强制实例只在堆栈上?

java - C# 中有没有一种方法可以像 Java 一样初始化锯齿状数组

javascript - ECMA双发箭头使用?

Vim 语法递归匹配第一个和第二个元素