草庐IT

has_insertion_operator

全部标签

c++ - 为什么继承的 protected operator=() 具有公共(public)访问权限

声明为protected的重载运算符=对于继承父类作为public的子类是公开可访问的。#includeclassA{public:A(charc):i(c){}chari;protected:A&operator=(constA&rdm){std::cout编译时没有错误:$g++-Wall-otest_operator~/test_operator.cpp$./test_operatora.i==aaccessingoperator=()a.i==x直接使用A是编译不过的。operator=()以外的任何其他运算符重载都不会编译。使用g++4.4.7和7.3.0以及c++98和c+

c++ - 为什么在 std::copy 期间使用 std::back_inserter 而不是 end()?

我见过std::copy()使用std::back_inserter但我使用了std::end()并且两者都有效.我的问题是,如果std::end()工作正常,为什么还需要std::back_inserter?#include#include#include#includeusingnamespacestd;intmain(){//Declaringfirstcontainervectorv1={1,2,3};//Declaringsecondcontainerfor//copyingvaluesvectorv2={4,5,6};//Usingstd::back_inserterins

c++ - "Socket operation on non-socket"错误由于奇怪的语法

我在调用connect时在我的一些网络代码中遇到错误Socketoperationonnon-socket并花了很多时间试图找出导致的原因它。我终于发现是以下代码行导致了问题:if((sockfd=socket(ai->ai_family,ai->ai_socktype,ai->ai_protocol)看到问题了吗?该行应该如下所示:if((sockfd=socket(ai->ai_family,ai->ai_socktype,ai->ai_protocol))我不明白的是为什么第一行不正确的行没有产生警告。换句话说,一般形式不应该:if(foo=bar()编译器看起来很奇怪,尤其是使

c++ - 在 switch 语句中使用类类型 : is it better than using typeid operator?

我在下面看到了有关C++标准$6.4.2中switch语句的内容。Switch语句可以带一个条件。Theconditionshallbeofintegraltype,enumerationtype,orofaclasstypeforwhichasingleconversionfunctiontointegralorenumerationtypeexists(12.3).Iftheconditionisofclasstype,theconditionisconvertedbycallingthatconversionfunction,andtheresultoftheconversion

c++ - insert in string的效率

我正在尝试为比longlong更大的非常大的整数编写这个自定义加法类。我正在研究的一种方法是将整数保留为字符串,然后将字符转换为它们的int组件,然后添加每个“列”。我正在考虑的另一种方法是将字符串拆分为多个字符串,每个字符串都是longlong的大小,然后使用字符串流将其转换为longlong添加然后重新组合。无论如何,我发现加法最容易反向完成以允许结转数字这一事实。在这种情况下,我想知道字符串插入方法的效率。似乎因为一个字符串是一个字符数组,所以所有的字符都必须移动一个。所以它会有所不同,但效率似乎是O(n),其中n是字符串中的字符数。这是正确的,还是只是天真的解释?编辑:我现在对

c++ - 这个 operator() 语法有什么作用?

这段代码取自http://drdobbs.com/cpp/184403774:templateclassMinResult{L&lhs_;R&rhs_;public:operatorL&(){returnlhs_上面的代码试图在箭头指向的线上做什么?我是C++的初学者,我知道我们可以通过定义operator()来覆盖/定义它。但是不应该这样定义吗L&operator(){returnlhs_我确信这是一些不同的语法,因为operator()应该是一个词。此外,您不能用不同的返回类型定义其中两个。 最佳答案 不,这是类型转换运算符。你

c++ - OpenCV 2.1:ostream operator<< cv::Mat 在哪里?

正在关注thisquestion,我试图将cv::Mat的内容打印到标准输出:#include#include#include#include#includeintmain(){cv::Matm=cv::Mat::ones(10,10,CV_32S);std::cout这会导致错误error:nomatchfor‘operator我在Ubuntu11.10上使用gcc4.6.1,并安装了opencv,不包括示例,遵循theseinstructions.我的问题是,运算符在2.1中可用吗?如果可用,我如何获得它? 最佳答案 更新到Op

c++ - 警告 C4180 : qualifier applied to function type has no meaning; ignored

我已经设置了编译器/Za选项来禁用语言扩展,以便编译器严格使用标准ISOC++。这是我收到以下警告的示例接口(interface)类warningC4180:qualifierappliedtofunctiontypehasnomeaning;ignored这是关于函数返回类型中的const限定符,如果我删除const,警告就会消失,但我不想这样做,我想重新启用lanqage扩展。我的问题是:这个警告合理吗?如果不是,那么我将使用pragma禁用警告,但在此之前我想确保此警告是“误报”因为下面的类是正确的ANSIISOC++不是吗?所以警告应该被禁用?classIBet{public:

c++ - 错误 C2995 : function template has already been defined

此代码产生17错误C2995:函数模板已被定义;在添加#include"set.h"header之前存在一组单独的错误。有一个与此关联的私有(private).cpp和.h文件。/**File:private/set.cpp*LastmodifiedonThuJun1109:34:082009byeroberts*-----------------------------------------------------*Thisfilecontainstheimplementationoftheset.hinterface.*BecauseofthewayC++compilestemp

c++ - 是否可以推断出 std::insert_iterator 包含的类型?

我有一个需要模板化迭代器类型的函数。它当前取消引用迭代器以检查被迭代的类型。templatevoidfunc(Iteratori){//Inspectthesizeoftheobjectsbeingiteratedconstsize_ttype_size=sizeof(*i);...}我最近发现一些标准迭代器类型,例如std::insert_iterator将*i定义为对i的简单引用.即sizeof(*i)是迭代器本身的大小;与sizeof(i)或sizeof(***i)相同是否有一种通用方法(支持C++03)来确定任何标准迭代器正在迭代的对象的大小或类型?