草庐IT

Non-Base

全部标签

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++ - 重载运算符 : const vs non-const return type : any difference of performance?

如果我们去维基百科article关于C++运算符,我们有一个例子:Addition:a+b->TT::operator+(constT&b)const;因此运算符返回类型为T的非常量。如果我们看这个guideline作者说返回类型应该是const以避免以下语法:(a+b)=c现在假设我不介意这种语法,并考虑a和b是大数组。从“纯”性能的角度来看,返回类型中缺少const关键字是否会阻止编译器的优化(g++和带有-O3的英特尔icpc)?如果答案是"is",为什么? 最佳答案 这是一个有趣的问题。在C++03中,没有更好的机会使用这两

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值不一致的问题,其中包含垃圾值。因此,标准没有定义这些条

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++ - 使用 boost 抛出异常的 Base64 编码

我尝试使用boostbase64编码器,我找到了一个示例,但我遇到了异常typedeftransform_width,8,6>it_binary_t我用过std::stringb64E(it_binary_t(Encrip.begin()),it_binary_t(Encrip.end()));我明白了Unhandledexceptionat0x75b1b9bcinagentid_coder.exe:MicrosoftC++exception:boost::archive::iterators::dataflow_exceptionatmemorylocation0x0046ed94.

c++ - 抑制 "Base class ‘class X’ 应该在复制构造函数中显式初始化”来自模板类的库头

我遇到了类似于thisone的问题.我正在使用第三方库。它在文件headers/things.h中如下定义类(由于许可问题伪造了所有名称):classA{public:virtual~A(){}};templateclassB:virtualpublicA{public:B(T){}B(constB){}virtual~B(){}};templateclassC:virtualpublicB{public:C(Tt):B(t){}C(constC&other):B(other){}~C(){}};此外,仍在库标题中:typedefCCC;错误信息是:cc1plus:warningsbe

c++ - 处理 "depends on non-NOTIFYable properties"警告

我有一个暴露给QML的C++对象,它具有“某种”只读属性,除了该属性仍然需要从QML设置,所以它定义了一个WRITE方法,但是除了初始的ma​​ndatory设置它永远不会改变,所以我觉得NOTIFY是多余的,因为它在使用时已经设置了该值,并且它永远不会改变。但是,QML不同意我的感受,并且无论如何它都会发出“表达式取决于不可通知​​的属性”警告。由于使用属性实例化对象的方式是设置该值的唯一适用方式,因此不可能使用可调用的setter,因为这样会要求对象已经“完成”并且没有它就无法真正完成那个值。因此需要属性机制和WRITE方法,不幸的是,这导致Qt相信属性会改变。我尝试将该属性设置为

c++ - SIMD/SSE : How to check that all vector elements are non-zero

我需要检查所有vector元素是否非零。到目前为止,我找到了以下解决方案。有一个更好的方法吗?我在Linux/x86_64上使用gcc4.8.2,指令高达SSE4.2。typedefcharChrVect__attribute__((vector_size(16),aligned(16)));inlinebooltestNonzero(ChrVectvect){constChrVectvzero={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};return(0==(__int128_t)(vzero==vect));}更新:上面的代码被编译为以下汇编代码(当编译为非