【问题标题】:Is 'auto const' and 'const auto' the same?'auto const' 和 'const auto' 是一样的吗?
【发布时间】:2012-05-29 09:48:03
【问题描述】:

auto constconst auto 之间是否存在语义差异,或者它们的意思相同?

【问题讨论】:

  • 和其他类型一样。
  • 我可以提供更准确但更合法的答案。由于您没有使用 language-lawyer 进行标记,因此我现在假设您不想要那么多细节。
  • @ArneVogel 你现在有机会了 :)

标签: c++ c++11 language-lawyer constants auto


【解决方案1】:

const 限定符适用于紧邻左侧的类型,除非左侧没有任何内容,否则它适用于紧邻右侧的类型。所以是的,它是一样的。

【讨论】:

  • 如果什么都没有,那就是对的(反之亦然):-)
  • 这并不是它真正的工作方式,说明符和限定符(在 declarator 之前)可以以任何顺序出现,例如long volatile unsigned const typedef long cvull;。该类型既不(完全)在const 的左侧也不在右侧。
  • @ArneVogel OMG,为什么中间允许typedef :)
  • 正如@ArneVogel 评论的那样,答案并不完全正确。这是公认的答案这一事实具有误导性(并且可能很危险)。
  • @ArneVogel 我在哪里可以阅读更多相关信息
【解决方案2】:

人为的例子:

std::vector<char*> test;
const auto a = test[0];
*a = 'c';
a = 0; // does not compile
auto const b = test[1];
*b = 'c';
b = 0; // does not compile

ab 都具有 char* const 类型。不要以为你可以简单地“插入”类型而不是关键字auto(这里:const char* a)! const 关键字将应用于 auto 匹配的整个类型(此处为:char*)。

【讨论】:

  • const 并不真正适用于char*,它适用于char 部分,而不是* 部分。
猜你喜欢
  • 2021-09-23
  • 2016-08-02
  • 1970-01-01
  • 2016-10-02
  • 2016-11-14
  • 2017-02-28
  • 1970-01-01
  • 2011-07-01
相关资源
最近更新 更多