草庐IT

Container_base

全部标签

c++ - 为什么 std::ios_base::ignore() 设置 EOF 位?

当我从一个流中读取所有数据,但没有尝试读取到它的末尾时,流的EOF没有设置。这就是C++流的工作方式,对吧?这就是它起作用的原因:#include#includecharbuf[255];intmain(){std::stringstreamss("abcdef");ss.read(buf,6);assert(!ss.eof());assert(ss.tellg()==6);}但是,如果我ignore()而不是read()ing数据,EOF被设置:#include#includeintmain(){std::stringstreamss("abcdef");ss.ignore(6);a

c++ - 从 Derived** 到 Base*const* 的转换

请在链接parashift之前阅读我的问题,我可以谷歌搜索,这种情况略有不同。这是不允许的Child**cc;Base**bb=cc;因为你可以做到*bb=newOtherChild;但是如果我们有Child**cc;constBase*const*constbb=cc;我不认为所有这些常量对于我的示例都是必需的,但只是为了确定..我认为应该工作的最低限度是Base*const*bb=cc;那你不能这样做*bb=newOtherChild;所以应该是安全的。但为什么不允许呢? 最佳答案 你混淆了两种情况:添加const上行虽然形式上

c++ - 使用 std::ios_base::binary 有什么意义?

我在Windows下读取Linux文件时遇到问题。这是问题讨论:Usingfstream::seekgunderwindowsonafilecreatedunderUnix.通过使用std::ios_base::binary打开文本文件解决了这个问题。指定。但是这种模式的实际意义是什么?如果指定,您仍然可以将文件作为文本文件使用(使用mystream写入并使用std::getline读取)。在Windows下,我注意到的唯一区别是mystream用途:0x0D0x0A作为行分隔符,如果std::ios_base::binary未指定(EOL和回车)0x0A作为行分隔符,如果std::i

c++ - 无法将 "member pointer to derived class"转换为 "member pointer to base class"

使用指向基类的指针调用类的虚成员函数当然是C++中非常常见的事情。所以我觉得很奇怪,当你有一个成员指针而不是一个普通指针时,似乎不可能做同样的事情。请考虑以下代码:structB{virtualvoidf();};structD:B{virtualvoidf();};structE{Bb;Dd;};intmain(){Ee;//Firstwithnormalpointers:B*pb1=&e.b;//OKB*pb2=&e.d;//OK,BisabaseofDpb1->f();//OK,callsB::f()pb2->f();//OK,callsD::f()//Nowwithmember

C++ 错误 : base function is protected

我想知道为什么下面的代码不能编译:classbase{protected:typedefvoid(base::*function_type)()const;voidfunction_impl()const{}//error:‘voidbase::function_impl()const’isprotected};classderived:publicbase{public:operatorfunction_type()const{returnboolean_test()==true?&base::function_impl:0;//error:withinthiscontext}pro

c++ - 是否存在将实际 Base 向下转换为 Derived 的情况?

在一般情况下,从(动态)Base向下转换到派生类之一Derived是(当之无愧的)未定义行为明显的UBclassBase{public:virtualvoidfoo(){/*doessomething*/ }inta;}classDerived:publicBase{public:virtualvoidfoo(){/*doessomethingdifferent*/ }doubleb;}Baseobj;DerivedderObj=*static_cast(&obj);//在目前编译器的实现方式中,这里显然至少会存在Vtable和b值不一致的问题,其中包含垃圾值。因此,标准没有定义这些条

C++:从 container1 中查找不在 container2 中的任何元素

我有一个std::set(s)和一个std::vector(五).保证vector是排序的/唯一的。我想知道v的所有元素是否都在s中(或者只是停在v的第一个元素而不是s中)。我可以将v转换成一个集合并进行==测试,但是有没有不改变容器类型的另一种方法? 最佳答案 关于std::includes的内容算法?这是一个简短的用法示例:vectorv1{1,2,4,8};vectorv2{1,2,3,8};sets{0,1,2,4,8,16};cout输出:10 关于C++:从container

android - Kotlin 与 Android : Base classes and Kotlin Android Extensions

所以我使用了KotlinAndroidExtensions我发现它非常易于使用并且非常值得。没有了findViewById或Butterknife.Bind(...).除了一种情况,我发现这一切都没有问题。在基类中,例如BaseActivity,通常会有一堆View出现在所有布局中,例如工具栏。以及changeToolbarColor()等常见操作,或setToolbarTitle().在这种简单的情况下,我不能使用KotlinAndroidExtensions因为,因为它是一个基类,View本身将出现在多个布局中,并且不能导入属性。在这种情况下,我只是简单地使用bylazy{find

android - Kotlin 与 Android : Base classes and Kotlin Android Extensions

所以我使用了KotlinAndroidExtensions我发现它非常易于使用并且非常值得。没有了findViewById或Butterknife.Bind(...).除了一种情况,我发现这一切都没有问题。在基类中,例如BaseActivity,通常会有一堆View出现在所有布局中,例如工具栏。以及changeToolbarColor()等常见操作,或setToolbarTitle().在这种简单的情况下,我不能使用KotlinAndroidExtensions因为,因为它是一个基类,View本身将出现在多个布局中,并且不能导入属性。在这种情况下,我只是简单地使用bylazy{find

C++ 自动类型转换 : wrong behaviour for a container class

我正在为非常小的常量vector和矩阵上的线性代数运算实现一些类。目前,当我这样做时:MyMathVectora={1,2,3};MyMathVectorb={1.3,2.3,3.3};std::cout然后First={2,4,6}和Second={2.3,4.3,6.3},因为第二个元素被编译器转换为第一个元素类型。是否有任何“简单”的方法来提供与nativeC++中相同类型的自动转换:int+double=double,double+int=double?非常感谢。编辑:使用答案给出的语法,我让operator+工作了。但我尝试了以下语法,编译失败并出现错误:expectedat