草庐IT

operation_type

全部标签

c++ - 在工作中遇到这个 "operator ClassName *"。这是什么意思?

有这段代码的类是ClassName指针的引用类,即:classClassName;classClassRef{ClassName*m_class;...operatorClassName*()const{returnm_class;}...我假设这用于指针有效性检查,例如:ClassRefref(newClassName())if(ref){blablabla}我的想法正确吗? 最佳答案 这是转换运算符的重载。每当需要将ClassRef对象转换为ClassName指针类型时,都会调用此运算符。所以;ClassRefr;ClassNa

c++ - "Type"不引用 C++ 上的值

我在OpenFrameworks图稿中遇到此错误。但似乎是一个简单的C++问题。ofVec2fdoesnotrefertoavalue当然,我在使用指针时遇到了问题,但我不明白为什么。我试图改变&->*Canvas4.cppvoidCanvas4::createStuff(){ballCollection.clear();for(inti=0;i.5)dir=-1;myBall=newBall(org,loc,radius,dir,offSet);ballCollection.push_back(*myBall);}//这是Ball类的构造函数;Ball::Ball(ofVec2f&_

c++ - operator const Base&() 是否应该用于不可访问的基类?

我希望有一个类允许访问其基本情况的const接口(interface),但不允许访问其他类。特别是:classB{};classA:privateclassB{public:operatorconstB&(){return*this;}};intmain(){Aa;constB&b=a;//Shouldthislinebeanerror?}g++给出了一个不可访问的基类错误。你们那里的语言专家认为这个错误在C++11/C++14中是正确的吗?是的,我意识到我可以(并且将会)这样做:intmain(){Aa;constB&b=a.operatorconstB&();}对这个构造的另一种方

C++ : Check if the template type is one of the variadic template types

这个问题在这里已经有了答案:Checkifatypeispassedinvariadictemplateparameterpack(3个答案)关闭7年前。假设我们有函数:templatevoidfoo(){...};检查“Kind”类型是否是C++(包括C++1z)中的“Kinds”类型之一的最简单方法是什么?

c++ - 为什么 `const type& variable` 作为函数输入?

我正在将一些函数从Matlab转换为C++,其中有一些与矩阵有关。我在Internet的某处找到了这个简单的函数:typedefstd::vector>Matrix;Matrixsum(constMatrix&a,constMatrix&b){size_tnrows=a.size();size_tncols=a[0].size();Matrixc(nrows,std::vector(ncols));for(inti=0;i谁能解释一下为什么他们使用constMatrix&a而不是Matrixa作为输入?他们是否习惯使用它,或者使用它有什么好处,因为我没有看到2个版本(constMatr

c++ - std::vector 保留后 operator[] 上 msvc 和 gcc 之间的行为差​​异,哪个是对的?

Thissnippetofcode使用msvc(越界错误)惨遭失败,但似乎在gcc和clang上都能正常工作。什么是正确的行为?#include#includeintmain(){std::vectorv;v.reserve(10);for(inti=0;i 最佳答案 行为未定义。reserve只保留内存,不影响容器的大小。也许您想使用resize?std::vectorv;v.resize(10);for(inti=0;i虽然在这种情况下你可以写std::vectorv(10);for(inti=0;i或者,您可以将reserve

c++ - 仅在与类的其他对象进行比较时,是否有任何理由不将 operator== 作为成员重载?

我一直在互联网上寻找答案,但我找不到任何答案。给出的唯一原因似乎与比较不同类型的对象有关(例如MyClass==int)。但最常见的用例是将一个类实例与同一类的另一个实例进行比较,而不是与任何不相关的类型进行比较。换句话说,我确实理解以下方面的问题:structA{booloperator==(intb);};但是我找不到任何好的理由在最明显的用例中不使用成员函数:structA{booloperator==(constA&);};最规范的重复Whatarethebasicrulesandidiomsforoperatoroverloading?作为经验法则说“将二元运算符重载为非成员

c++ - operator new 如何调用类的构造函数?

我知道,new操作符会调用类的构造函数。但是它是如何发生的,用于此的底层技术是什么。 最佳答案 这是我想象的样子:T*the_new_operator(args){void*memory=operatornew(sizeof(T));T*object;try{object=new(memory)T(args);//(*)}catch(...){operatordelete(memory);throw;}returnobject;}(*)从技术上讲,它并不是真正调用placement-new,但只要你不重载它,心智模型就可以正常工作:

c++ - 添加虚拟删除错误 : type 'base' is not a direct base of derived class

考虑以下示例代码:#includeusingnamespacestd;classbase{public:base(){cout这给出了错误:error:type`base'isnotadirectbaseof`derived2'为什么会出现这个错误?如果我将基类设为虚拟,则错误不再存在。这是什么原因? 最佳答案 因为base不是derived2的直接基类。您必须为您的直接基础提供构造函数,在本例中为derived1。虚拟基地除外。它们总是在叶类中初始化,否则您可能会为同一个基类调用多个构造函数。因此,如果您使base成为虚拟的,您不

c++ - 如何理解函数ostream& operator<< (ostream& os, const unsigned char* s)

对于像这样的函数声明ostream&operator我想知道返回了什么。CPP引用说它返回ostream对象。但为什么它是ostream&而不是简单的ostream?谢谢 最佳答案 运算符返回ostream&(即对ostream对象的可修改引用)而不是拷贝或void的原因是它允许链接,因为实例,以std::cout作为ostream对象的常见示例:unsignedinti=2;std::cout这里我们链接了两个constchar*,一个unsignedint和一个流修饰符,而不必用单独的行将它们分开,这使得阅读和明白了。