jjzjj

c++ - 为什么 g++ 声明某些 valarray<double> o 有 "no matching function for call cbegin(o)"?

请考虑以下代码:usingcustom_t=std::valarray;custom_to;unsignedacc=std::accumulate(std::cbegin(o),std::cend(o),0);g++-5说Nomatchingfunctionforcalltocbegin(custom_t&)如果我改用std::begin(o)和std::end(o),一切正常。这是编译器错误吗?代码使用VisualStudio2015编译。 最佳答案 这是一个libstdc++错误,我刚刚创建了https://gcc.gnu.or

c++ - 非成员函数 begin()/cbegin() 及其constexpr-ness

C++11引入了没有constexpr-说明符的std::begin()非成员函数,然后C++14更新为constexpr-std::begin()用于数组类型(T(&)[N])并附加constexpr-std::cbegin()用于通用容器类型(constC&).引自http://en.cppreference.com/w/cpp/iterator/begintemplateconstexprT*begin(T(&array)[N]);//(sinceC++14)templateconstexprautocbegin(constC&c)->decltype(std::begin(c)

c++ - 为什么 Netbeans 无法识别 `cbegin()` 、 `cend()` 、 `unordered_set` 以及其他 C++ 功能?

我的C++应用程序在Netbeans中按预期编译和运行。但是,代码帮助无法识别诸如cbegin()、cend()、unordered_set之类的术语,如红色下划线所示:然而,代码帮助确实识别end()。无济于事,我尝试转到项目->属性->代码帮助->C++标准->C++11。我还应该更新或配置哪些内容才能让Netbeans代码帮助识别这些术语? 最佳答案 请确保您使用的是Netbeans版本>=7.2,因为此版本(see"C/C++")中引入了C++11支持。如果您已经在NB中将C++标准设置为C++11,您可以重新解析您的项目:

c++ - 在 C++14 中支持 std::cbegin()

ScottMayers的“EffectiveModernC++”中的第13条指出,const_iterators优于迭代器。我同意,但我也想使用非成员函数而不是成员函数。根据这本书,在C++14中应该有一个非成员函数std::cbegin()和std::cend()。为了使用这个函数,我刚刚安装了gcc版本4.9.2并使用标志-std=c++14进行了编译。在我尝试使用std::cbegin()之前,它似乎可以编译。我开始寻找对该功能的支持,但找不到任何相关信息。例如,在gnuonlinedocsstatus甚至没有提到该功能。我的问题是,std::cbegin()和std::cend

c++ - 给定 cbegin()、cend(),为什么没有 cfront()、cback()、cfind()、...?

所以,为了让代码如autovect=...;autoit=vect.begin(),end=vect.end();//wantconst_iterator,gettingiterator选择正确的begin()和end()重载,即使对于非常量容器,更明确的cbegin()/cend()添加了函数。为什么到此为止?关联容器有一个find()方法有同样的问题。序列容器有front()和back(),同样有同样的问题。这些缺失是明确的const版本遗漏,还是设计使然? 最佳答案 更广泛的API是有成本的,即使只是在寻找您想要的功能时跳过它

c++ - cbegin/cend 是否不足以用于基于范围的 for 循环?

我有一个类,我们称它为ConstVector,它只定义cbegin/cend而不是begin/end,因为我不想在构造后对其成员进行修改。我尝试像这样使用基于范围的for循环:ConstVectorconst_vector(1,2,3);for(constauto&x:const_vector)....虽然类的相关部分看起来像这样:templateclassConstVector{public:ConstVector(std::initializer_listvalues);typenamestd::vector::const_iteratorcbegin(void)const;typ

c++ - cbegin,cend 为 Qt 5.2.1 中的空容器提供无效结果

在Qt5.2.1中,下面的代码结果怎么不一样?QVectorc;if(c.cbegin()!=c.begin()){std::cout这会打印“argh”,但以下不会。QVectorc;if(c.begin()!=c.cbegin()){std::cout请注意,cbegin和begin位置是交换的。但是,如果您更改容器状态,我的意思是例如push_back里面的东西,它可以正常工作。在我看来,在容器上调用任何可变方法之前,cbegin和cend都是无效的。是错误还是功能? 最佳答案 您观察到的行为与调用QVector::begin

c++ - cbegin,cend 为 Qt 5.2.1 中的空容器提供无效结果

在Qt5.2.1中,下面的代码结果怎么不一样?QVectorc;if(c.cbegin()!=c.begin()){std::cout这会打印“argh”,但以下不会。QVectorc;if(c.begin()!=c.cbegin()){std::cout请注意,cbegin和begin位置是交换的。但是,如果您更改容器状态,我的意思是例如push_back里面的东西,它可以正常工作。在我看来,在容器上调用任何可变方法之前,cbegin和cend都是无效的。是错误还是功能? 最佳答案 您观察到的行为与调用QVector::begin

c++ - 没有 cbegin()/cend() 的 std::initializer_list

如果std::initializer_list中的元素总是const值,为什么我们有像begin()/end()这样的模板方法而不是cbegin()/cend()?这个名称(按照惯例,与例如std::vector相比)可能表明两个std::initializer_list方法都可以返回iterator,当它们总是返回const_iterator。 最佳答案 虽然我无法深入了解cbegin()的原因和cend()不属于std::initializer_list的界面除了begin()和end(),当然有充分的理由说明为什么最后两个成员

c++ - 没有 cbegin()/cend() 的 std::initializer_list

如果std::initializer_list中的元素总是const值,为什么我们有像begin()/end()这样的模板方法而不是cbegin()/cend()?这个名称(按照惯例,与例如std::vector相比)可能表明两个std::initializer_list方法都可以返回iterator,当它们总是返回const_iterator。 最佳答案 虽然我无法深入了解cbegin()的原因和cend()不属于std::initializer_list的界面除了begin()和end(),当然有充分的理由说明为什么最后两个成员
12