C++中一个变量定义列表中的常量和非常量
Const and non-const in one variable definition list in C++
为什么不能在一个定义列表中定义 const 和 non-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++ 变量定义列表以支持单个定义列表中的 const
和 non-const
?
在 for
中,您可以声明多个具有相同类型的变量。 size_t
和 const 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)
;
}
为什么不能在一个定义列表中定义 const 和 non-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++ 变量定义列表以支持单个定义列表中的 const
和 non-const
?
在 for
中,您可以声明多个具有相同类型的变量。 size_t
和 const 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)
;
}