这个问题在这里已经有了答案:ShouldIusethesamenameforamembervariableandafunctionparameterinC++?(9个回答)关闭9年前。例如,这是以下任何一项吗不良做法不可读低效(调用this指针)任何其他不利于这样做的原因.classPerson{public:stringname;Person(stringname){this->name=name;}};附言怎么样Person(stringname):name(name){}
我找到了一些这样的代码:classfoo{inta;public:foo(intv):a{v}{}booloperator==(constfoo&rhs)const&{return(rhs.a==a);}};它编译并运行。我想知道在运算符==中引用(&)有什么好处(或缺点)。 最佳答案 作为T.C.已经在评论中指出,这个原因不是“只接受左值”。const引用可以很好地绑定(bind)到右值。原因是只有当所有重载都指定一个值类别时,函数才能在隐式对象参数的值类别上重载。也就是说,当您添加仅匹配右值的&&重载时,除非您将&添加到现有重载
考虑以下代码:classA{public:voidfoo(){autofunctor=[this](){A*a=this;autofunctor=[a]()//Thecompilerwon'taccept"this"insteadof"a"{a->bar();};};}voidbar(){}};在VC2010中,使用this代替a会导致编译错误。其中:1>main.cpp(20):errorC3480:'`anonymous-namespace'::::__this':alambdacapturevariablemustbefromanenclosingfunctionscope1>m
请注意,这不是关于std::condition_variable::wait_for()的问题。我知道这可能会虚假唤醒。我的程序的行为表明这个问题的答案是肯定的,但是STL文档对于condition_variable的情况非常清楚。至少在cppreference.com,this_thread的正确答案似乎是否。编译器是gcc4.8.1,以防这是一个缺陷。 最佳答案 C++标准的相关部分(第[thread.thread.this]/7-9段)没有提及任何关于std::this_thread::sleep_for的虚假唤醒,不像例如对
相当尴尬的是,我写了类似下面的东西(经过sanitizer):vector_itemnext(){if(this->it==this->myVector.end()){this->it==this->myVector.begin();}return*(this->it++);}明显的错误非常明显。然而,它确实花了很短的时间来追踪。没有为此生成编译器警告,但应该生成一个吗?这里创建了一个未使用的r值(不是说,一个未使用的函数返回值,因为它的副作用而被调用),在我看来这表明代码有问题。使用g++-Wall-Wextra编译。(海合会4.8.3)我知道-Wunused-result但这里不适
我知道无法通过从类的构造函数调用shared_from_this()来获取shared_ptr,因为该对象尚未构造。但是,是否有可能从构造函数中获得对象的weak_ptr?一些讨论“weak_from_raw()”方法的boost论坛帖子表明这是可能的。编辑:Boost形式讨论weak_from_rawhttp://lists.boost.org/boost-users/2010/08/61541.php 最佳答案 我想你指的是什么isthis.这似乎没有被合并到boost版本中(这可能是错误的)。来自boostdocs:常见问题问
我为libsvm实现了OpenCV/C++包装器。在对SVM参数(RBF内核)进行网格搜索时,预测总是返回相同的标签。我创建了人工数据集,这些数据集具有非常容易分离的数据(并尝试预测了我刚刚接受过训练的数据),但是仍然返回相同的标签。我使用了libsvm的MATLAB实现,并在同一数据集上实现了高精度。我在设置问题上肯定做错了事,但是我已经阅读了很多自述文件,但我找不到问题。这是我设置libsvm问题的方法,其中数据是OpenCVMat:constintrowSize=data.rows;constintcolSize=data.cols;this->_svmProblem=newsv
我能得到的所有编译器都同意这很好:templateautofoo(Check,T...)->void;templateautofoo(int,T...)->void;intmain(){foo(7,"");}但是,根据gcc,以下代码(带有不能从函数参数推导的前导模板参数)是不明确的:templateautobar(Check,T...)->void;templateautobar(int,T...)->void;intmain(){bar(7,"");//ambiguousaccordingtogccbar(7);//justfine}另一方面,clang、msvc和icc对此非常满
我当前的项目中有以下(简化的)代码:#include#include#include#includeclassTest{public:Test()=default;Test(constTest&other)=delete;Test&operator=(constTest&other)=delete;Test(Test&&other)=default;Test&operator=(Test&&other)=default;voidsetFunction(){lambda=[this](){a=2;};}intcallAndReturn(){lambda();returna;}privat
在thisquestionofmine,@DeadMG说通过this指针重新初始化一个类是未定义的行为。标准中有没有提到它?例子:#includeclassX{int_i;public:X():_i(0){std::cout~X();new(this)X(5);}voidprint_i(){std::coutExampleoutputatIdeone(我知道UB也可以是“看似正确的行为”)。请注意,我没有在类外部调用析构函数,因为不访问生命周期已结束的对象。另请注意,@DeadMG说直接调用析构函数是可以的,只要它对每个构造函数调用一次即可。 最佳答案