为什么C++没有简洁的语法允许在不定义计数器的情况下多次执行操作?



我想多次执行单个操作,而不定义计数器。例如,像这样:

do(10)
{
//do something
}

我认为这在几种不同的情况下很有用。例如:

  • 从开始索引std::list中删除多个连续项目。
  • 随着时间的推移
  • 或在某些特定时间多次发射某些信号。
  • 将相同的数据添加到列表中以进行自定义初始化 许多场景不仅限于上面列出的场景。

其他语言具有与此类似的语法,允许重复执行相同的命令,而无需显式定义计数器变量。在我看来,定义计数器与人类思维完全不一致。

模拟我们的想法:

在现实中,我们总是直接做几次。

但现在语法如下所示:

  • 呃。。。我要做sth。三次。
  • 好了,准备好了,我开始了。

灵魂拷问:为什么C++不提供简洁的语法?虽然我是C++的粉丝,但我还是忍不住想知道为什么有些人不喜欢C++,因为C++很少考虑人们的想法。我希望C++能与时俱进,成为未来的编程语言。

与现代C++重复代码设定次数的方式不同。我给出了我的计划,应用场景,甚至情感诉求。

C++的演变是由委员会决定的。用最简单的术语来说,人们提出一些东西,委员会接受或拒绝它。

有趣的是,您的建议

do (integral_expression)
{
}

不会是重大更改。请注意,在循环体或whiledo相邻之后没有whileintegral_expression几乎是C++中的生产规则,在这种情况下,如果标签为switch块,尽管在这种情况下它可以在运行时评估。它甚至可以在某种意义上帮助自己清理代码,即等效的

for (int i = 0; i < integral_expression; ++i)
{
}

i引入循环体,这可能不方便,因为它可能会遮蔽现有的i

也就是说,需要考虑integral_expression为负的情况。也许引入unsigned_integral_expression与在标准C++的合理常见扩展中声明可变长度数组时需要编写为 size 表达式的内容没有什么不同?

如果您想在C++中使用此功能,那么为什么不提出呢?

下面是一个C++代码的示例,该代码将执行给定次数的操作。 也可以在 C 中完成,但函子必须是函数指针。

这可能有一个用例,但我认为对于C++程序,标准循环语法会更可取。

#include <iostream>
#include <functional>
static void Do(int count, std::function<void(int)> fn)
{
while(count)
{
if (count > 0) --count;
else if (count < 0) ++count;
fn(count);
}
}
int main()
{
Do(10, [](int count) { std::cout << "Loop is at " << count << "n"; });
}

如果需要,lambda可以实现干净的纯库:

template<typename F>
constexpr void repeat(std::size_t const n,F const& f){
for (std::size_t i=0;i<n;++i)
f();
};
int x{};
repeat(5,[&]{
std::cout << ++x << std::endl;
});

这样的提议很可能会被委员会放弃,除非有更大的理由支持它。

最新更新