为什么不能在一个定义列表中定义 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 ++变量定义列表以支持单一定义列表中的const
和non-const
?
答案 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_t
和const size_t
是不同的类型。
您不需要在那里声明iCount
,只需将; i < data.size();
作为条件。
答案 4 :(得分:0)
因为它们是不同的数据类型,因此它不是单一的定义列表。