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

Const and non-const in one variable definition list in C++

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

例如,在使用 for 循环时:

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

我想从 const-correctness 的角度来看会更好。

P.S。我第一次问错了这个问题。它更适合语言设计者,而不是 "why it can be compiled on my machine?"。我想说的是,如果在下一个 C++ 标准中将其作为语法糖来实现,那就更好了。这也将防止在每个循环迭代中调用 data.size()。我的意思是,为什么不扩展当前的 C++ 变量定义列表以支持单个定义列表中的 constnon-const

for 中,您可以声明多个具有相同类型的变量。 size_tconst size_t 是不同的类型。

这里不用声明iCount,写; i < data.size();作为条件即可。

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

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

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

目前您可以将 cv 限定符与指针声明符一起使用。例如这样的构造是有效的

int x, * const p = &x;

所以我看不出这个结构的严重原因

int x, const y = 10;

不允许。

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

I wanted to say that this would be much better if it would be implemented as syntax sugar in next C++ standards.

"Syntactic sugar causes cancer of the semi-colon."

添加这样的 "simple" 更改会带来巨大的成本,在规范的复杂性、编译器实现的复杂性、IDE 和代码分析工具的复杂性方面,并不一定会使语言变得任何更易于教学或使用,除了您展示的 一个 特定案例。

Also this will prevent calls of data.size() in each loop iteration.

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

I mean, why not to extent current C++ variable definition list to support const and non-const in single definition list?

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

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