C ++中一个变量定义列表中的Const和非const

时间:2015-03-02 13:53:24

标签: c++ variables standards definition

为什么不能在一个定义列表中定义 const 非const 变量?

例如,在使用for循环时:

for (size_t i = 0, const iCount = data.size(); i < iCount; ++i);

我认为从const-correctness观点来看会更好。

P.S。我第一次问这个问题是错的。对于语言设计者而言,更多的是&#34;为什么它可以在我的机器上编译?&#34; 。我想说如果在下一个C ++标准中将其作为语法糖实现,那将会好得多。这也将阻止在每次循环迭代中调用data.size()。我的意思是,为什么不扩展当前的C ++变量定义列表以支持单一定义列表中的constnon-const

5 个答案:

答案 0 :(得分:2)

您不能,因为for循环声明中只能有一种类型。 const是该类型的一部分。

答案 1 :(得分:2)

在我看来,这只是一个惯例。可以采用限定符可以包含在声明者中。

目前,您可以将cv-qualifiers与指针声明符一起使用。例如,这种结构是有效的

int x, * const p = &x;

所以我没有看到为什么这个建筑的严重原因

int x, const y = 10;

是不允许的。

你应该在isocpp.org上讨论这个问题,其中讨论了C ++标准。:)

答案 2 :(得分:1)

  

我想说如果在下一个C ++标准中将其作为语法糖实现,那将会好得多。

“句法糖导致结肠癌。”

在规范的复杂性,编译器实现的复杂性,IDE和代码分析工具的复杂性方面,添加像这样的“简单”更改会产生巨大的成本,并且不一定使语言更容易教授或使用,除了您已经显示的 one 特定情况。

  

这也将阻止在每次循环迭代中调用data.size()。

您是否检查过优化代码中是否确实存在多个调用?如果没有,为什么我们需要语言扩展来防止不会发生的事情?

  

我的意思是,为什么不扩展当前C ++变量定义列表以支持单定义列表中的const和非const?

除了for循环之外,它在任何地方都不会广泛使用,无论如何你都可以轻松完成:

{
  const size_t iCount = data.size();
  for (size_t i = 0; i < iCount; ++i)
    ;
}

答案 3 :(得分:0)

for内,您可以声明多个变量,前提是它们具有相同的类型。 size_tconst size_t是不同的类型。

您不需要在那里声明iCount,只需将; i < data.size();作为条件。

答案 4 :(得分:0)

因为它们是不同的数据类型,因此它不是单一的定义列表。