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