C++;概念消失了。其他哪些功能也应该使用? P>正如你所听到的,C++标准委员会的最后一次会议投票否决了下一个C++标准的概念。当然,这会影响其他特性,并且似乎会再次打开标准。如果是这样的话,您认为应该去掉(或添加)哪些其他功能,为什么

C++;概念消失了。其他哪些功能也应该使用? P>正如你所听到的,C++标准委员会的最后一次会议投票否决了下一个C++标准的概念。当然,这会影响其他特性,并且似乎会再次打开标准。如果是这样的话,您认为应该去掉(或添加)哪些其他功能,为什么,c++,c++11,c++-concepts,C++,C++11,C++ Concepts,链接: --Danny Kalev(关于删除概念的决定) --比亚恩·斯特劳斯特鲁普(关于现在的概念问题) --Martin Tasker(如果必须修复概念,则会对C++0x计划产生影响) -斯特劳斯特开始讨论多布斯博士的问题 -赫伯萨特 -Jeremy Siek为当前概念规范辩护 -Doug Gregor谈C++Next(关于概念的历史和删除) 没有,我认为草案的其余部分很棒——大量非常小的部分可以独立正确实现,允许供应商向完全支持方向发展,并允许用户采用“购物清单”方法 合同的情况完全不同,

链接:

--Danny Kalev(关于删除概念的决定)

--比亚恩·斯特劳斯特鲁普(关于现在的概念问题)

--Martin Tasker(如果必须修复概念,则会对C++0x计划产生影响)

-斯特劳斯特开始讨论多布斯博士的问题

-赫伯萨特

-Jeremy Siek为当前概念规范辩护


-Doug Gregor谈C++Next(关于概念的历史和删除)

没有,我认为草案的其余部分很棒——大量非常小的部分可以独立正确实现,允许供应商向完全支持方向发展,并允许用户采用“购物清单”方法


合同的情况完全不同,因为它们就像一个全新的并行类型系统,很可能会导致不同的编译器出现各自的向后兼容性问题,这与web浏览器中的CSS非常相似。

未命名的函数/lambda函数让我感到紧张。函数对象非常好,并且是显式的,因此更容易阅读和查找


另一方面,我喜欢概念,虽然我肯定不会每天使用它们。

< P>个人,我希望C++最终摆脱C。我基本上想要D,但是没有D附加的所有东西,使用STL

对我来说,问题不在于应该剥离哪些其他功能,而是在删除概念后,其他功能会有多复杂。还有,在没有概念的情况下,其他功能需要多长时间才能重新表述

许多特征假设概念会被语言接受,而措辞是用概念来表达的。(我想知道是否有任何建议的功能取决于概念)

我还想知道其他库将如何发展(想想boost::type_traits)以占据概念留下的位置。根据应用于类型参数的特性,可以实现所提供的部分概念(即使以更麻烦的方式)

<>对我来说,概念加在语言中最重要的是编译错误的表达性表述,这是当今C++批评最多的地方之一。
R.I.p.概念。

去掉模板代码上的错误消息


Irc概念应该解决一个大的C++编码器问题:STL的人类可读错误消息。坏消息是,这个问题没有得到解决。

我认为有两件事应该添加到C++0x中,我自己也考虑过这两件事,然后发现其他人以前也提出过,但它们似乎不会发生

1。默认移动构造函数和移动分配运算符

编写移动构造函数是一项手动且容易出错的活动,如果添加了成员,则必须将其添加到移动构造函数和赋值运算符中,并且必须严格使用
std::move
。这就是我想的原因

编辑(2009-10-01):看来这毕竟是个问题

2。覆盖表达式模板的类型推断

通常定义不应直接使用的类型,例如,如果对此类对象使用
auto
decltype
,则可能会出现意外行为。 因此a(或使用
=delete
语法防止扣除)

矢量加法示例

// lazy evaluation of vector addition
template<typename T, class V1, class V2>
class vector_add {
     V1& lhs_;
     V2& rhs_;
public:
     T operator[](size_t n) const
     { return lhs_[n] + rhs_[n]; }
     // If used by auto or decltype perform eager creation of vector 
     std::vector<T> operator auto() const 
     {
         if (lhs_.size() != rhs_.size()) 
             throw std::exception("Vectors aren't same size");
         std::vector<T> vec;
         vec.reserve(lhs_.size());
         for (int i = 0; i < lhs_.size(); ++i)
            vec.push_back(lhs_[i] + rhs_[i]);
         return vec;
     }
//向量加法的延迟计算
模板
类向量加{
V1&lhs;
V2&rhs;
公众:
T运算符[](大小n)常量
{返回lhs_n]+rhs_n]}
//如果由auto或decltype使用,则执行矢量的即时创建
std::向量运算符auto()常量
{
如果(lhs_uu0.size()!=rhs_0.size())
抛出std::exception(“向量大小不同”);
std::vec;
向量保留(lhs_uu.size());
对于(int i=0;i
当然,这会影响到其他人 功能和可能会抛出 标准又大开了

很难。他们仍然希望尽快完成标准,这是删除概念的主要原因之一。将其“完全开放”给无关的更改只会丢掉他们通过放弃概念而获得的一切

无论如何……在剩余的C++0x添加项中,我想不出还有什么我想删除的。不过我同意他们关于概念的决定。Stroustrup的论文确实概述了一些严重的问题,当前的概念规范无疑会简化模板错误消息,但它会通过显著减少模板错误来做到这一点通用编程的有用性——我不愿意为此付出代价

当我第一次读到那篇文章时,我很害怕,因为我认为对规范进行重大修改的过程已经太晚了。结果却不是这样,委员会愿意采取戏剧性的行动

但除此之外,我认为C++0x状态良好,剩下的新特性看起来都很有价值

当然,我很想删除很多现有的功能。主要是
vector
专门化。还有其他一些功能不起作用的流行示例(导出关键字、异常规范),但向量专门化是其中唯一一个不能忽略的。只要我们不尝试导出模板,关键字是否存在(并且不是由comp实现的)都无关紧要
// lazy evaluation of vector addition
template<typename T, class V1, class V2>
class vector_add {
     V1& lhs_;
     V2& rhs_;
public:
     T operator[](size_t n) const
     { return lhs_[n] + rhs_[n]; }
     // If used by auto or decltype perform eager creation of vector 
     std::vector<T> operator auto() const 
     {
         if (lhs_.size() != rhs_.size()) 
             throw std::exception("Vectors aren't same size");
         std::vector<T> vec;
         vec.reserve(lhs_.size());
         for (int i = 0; i < lhs_.size(); ++i)
            vec.push_back(lhs_[i] + rhs_[i]);
         return vec;
     }