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

为什么C++没有简洁的语法,允许在不定义计数器的情况下多次执行操作?,c++,c++11,c++17,C++,C++11,C++17,我想多次执行单个操作,而不定义计数器。例如,像这样: do(10) { //do something } 我认为这在几种不同的情况下都很有用。例如: 通过起始索引从std::list中删除多个连续项。 在一段时间内或在某个特定时间多次发出某些信号。 将相同的数据添加到列表以进行自定义初始化 许多场景并不限于上面列出的场景。 其他语言也有类似的语法,允许重复执行相同的命令,而不必显式定义计数器变量。在我看来,定义计数器完全不符合人类的思维 模拟我们的思考方式: 实际上,我们总是直接做几次

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

do(10)
{
    //do something
}
我认为这在几种不同的情况下都很有用。例如:

通过起始索引从std::list中删除多个连续项。 在一段时间内或在某个特定时间多次发出某些信号。 将相同的数据添加到列表以进行自定义初始化 许多场景并不限于上面列出的场景。 其他语言也有类似的语法,允许重复执行相同的命令,而不必显式定义计数器变量。在我看来,定义计数器完全不符合人类的思维

模拟我们的思考方式:

实际上,我们总是直接做几次某事

但现在语法如下所示:

do(10)
{
    //do something
}
嗯……我打算做三次某事。 好了,准备好了,我开始了。 灵魂拷问:为什么C++不提供简明的语法?虽然我是C++的爱好者,但我还是不禁要问为什么有些人不喜欢C++,因为C++很少考虑人们怎么想。我希望C++能够与时俱进,成为未来的编程语言。
我给出了我的计划,应用场景,甚至情感诉求。

< P> C++的演变是由委员会来进行的。用最简单的话来说,人们提出东西,而委员会接受或拒绝它

有趣的是你的建议

do (integral_expression)
{
}
不会是一个突破性的改变。请注意,在环体之后或与do相邻时没有时间。集成块表达式几乎是C++中在交换块的情况下的一个生产规则,尽管在这种情况下它可以是运行时可评估的。它甚至可以使自己成为干净的代码,因为

for (int i = 0; i < integral_expression; ++i)
{
}
将i引入到循环体中,这可能会带来不便,因为它会对现有i进行阴影处理

也就是说,需要考虑积分表达式为负的情况。也许在介绍一个在标准C++(

)中合理扩展的可变长度数组时,不需要介绍unsiNedIGieldAlgIn表达式,而不需要将它作为大小表达式写入。

如果你想在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"; });
}

如果需要,lambdas使干净的纯库实现成为可能:

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;
});

除非有更大的理由支持,否则该提案可能会被委员会否决。

对于int i=0;i<10++我没那么坏吧?至少它概括了。而true{/*做某事*/}会多次做某事。看不到柜台;这样的语法有什么好处,与一般的形式相反?据我所知,把这个完全放进C++中,就像OP提出的那样,不会是一个突破性的改变。但是ISO的人会讨厌的。甚至可以在初始化向量时使用。它还具有不将计数变量泄漏到循环体的优点。它为什么会存在?你能为这样的特性想出一个有意义的用例吗?在幼儿园学习语言时,将儿童引入编程是有意义的。但在任何真正的工业级语言中,这样做的目的是什么?在哪里可能需要多次重复相同的操作?我的意思是,我可以强迫自己去想一些这样的例子,但它们是如此罕见和人为的。。。它只是不能证明引入专用语言特性是合理的。