草庐IT

non-passphrase-protected

全部标签

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++ - 处理 "depends on non-NOTIFYable properties"警告

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

c++ - 访问基类的 protected 构造函数

派生类可以在其ctor-initializer中调用protected基类构造函数,但仅限于其自己的基类子对象,而不能在其他地方调用:classBase{protected:Base(){}};classDerived:Base{Baseb;public:Derived():Base(),//OKb(){//errorBaseb2;//error}};标准对此有何规定?这是[class.protected]/1:AnadditionalaccesscheckbeyondthosedescribedearlierinClause11isappliedwhenanon-staticdata

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));}更新:上面的代码被编译为以下汇编代码(当编译为非

c++ - 派生类不能访问基类的 protected 成员

考虑下面的例子classbase{protected:intx=5;int(base::*g);};classderived:publicbase{voiddeclare_value();derived();};voidderived::declare_value(){g=&base::x;}derived::derived():base(){}据了解,只有基类的friend和派生类可以访问基类的protected成员,但在上面的示例中,我得到以下错误"ErrorC2248'base::x':cannotaccessprotected在类中声明的成员但是当我添加以下行时friendcl

c++ - "temporary of type ' A ' has protected destructor", 但它的类型是 B

在以下代码中,使用Clang8.0.0+和-std=c++17编译,使用B{}创建派生类实例会报错错误:'A'类型的临时对象具有protected析构函数。当临时文件的类型为B(因此应该有一个公共(public)析构函数)时,为什么A会出现在此消息中?https://godbolt.org/z/uOzwYaclassA{protected:A()=default;~A()=default;};classB:publicA{//canalsoomitthese3lineswiththesameresultpublic:B()=default;~B()=default;};voidfoo(

c++ - 为什么允许在派生类中调用 protected 静态方法?

如解释的那样,不允许在派生类中调用protected构造函数here.接受的答案解释说protected仅当A类的对象是B类的子对象。到目前为止,还不错。但是,为什么允许(至少在GCC4.6.3中)调用静态保护方法?具体来说,以下编译对我来说没有任何意义,而注释行则没有:classA{protected:A(){}staticAmakeA(){returnA();}};classB:publicA{public:staticAmakeAFromB(){returnmakeA();//compiles//returnA();//doesnotcompile}};从哲学上讲,构造函数非常类

c++ - protected 继承

为什么定义和提出protected和private继承?我知道在某些情况下可以使用私有(private)继承,但不推荐这样做。protected继承怎么样?谁能给我提供一种选择protected继承的情况?我很少看到这个。非常感谢! 最佳答案 私有(private)继承通常用于mixin——人们继承是为了从基类中获取功能,而不是因为“is-a”继承。protected继承也可以用于混合,其中混合功能也可用于下游类。 关于c++-protected继承,我们在StackOverflow上找

c++ - 将 protected 析构函数虚拟化是否有用?

/*ChildisinheritedfromParent*/classParent{public:Parent()//Constructor{cout如果我将Parent的析构函数设为虚拟,则会出现错误,那么将protected析构函数设为虚拟的目的是什么? 最佳答案 举个例子:假设你有一个实现引用计数的基类。您有一个addRef和一个release方法,并且您希望销毁您的对象,如果(并且仅)内部计数器通过对release的调用。因此,首先您希望您的析构函数受到保护(因为您只想从release中销毁对象)。如果你打算从你的类派生,你