草庐IT

send_this_email

全部标签

c++ - 提升 shared_from_this 和多重继承

我目前在使用boostenable_shared_from_this和多重继承时遇到了一些麻烦。场景可以描述如下:类A实现了一些功能,应该继承自enable_shared_from_this类B实现了另一个功能,应该继承自enable_shared_from_thisD类继承A和B的功能(classD:publicA,publicB{})当使用类D中的某些类B功能时,出现异常(bad_weak_ptr)从D类继承enable_shared_from_this对我来说不是一个选择我不确定如何解决这个问题。哦,我使用的是VisualC++2010。 最佳答案

c++ - 什么时候在 C++ 中初始化 "this"指针?

您好,我有一个关于this指针的问题,什么时候构造一个对象,什么时候初始化它?这意味着,我什么时候可以使用它?虚表是在构造函数中构造的,和this指针一样吗?例如,我有一个这样的代码。输出为8,是否表示在进入构造函数之前,this指针已经初始化?classA{public:A(){cout如果是真的,在进入构造函数之前还会发生什么?如果不是真的,this指针是什么时候初始化的? 最佳答案 this指针不是对象或类的成员-它是您调用的方法的隐式参数。因此,它的传递与任何其他参数非常相似-除了您不直接要求它。在你上面的例子中,构造函数是

c++ - 从类返回引用到 this

我有以下foo类的成员。foo&foo::bar(){returnthis;}但我收到编译器错误。我做错了什么蠢事?编译器错误(gcc):错误:从'foo*const'类型的临时对象初始化'foo&'类型的非常量引用无效 最佳答案 this是一个指针。所以应该是return*this; 关于c++-从类返回引用到this,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/262165

c++ - Visual Studio 无法在 Release模式下显示 'this' 的值(带有调试信息)

原问题:为什么在VSc++发布版本中this指针为0?在使用/Zi(编译器:调试信息格式-程序数据库)和/DEBUG(链接器:生成调试信息,是)选项中断VisualStudio2008SP1版本构建时,为什么“this”指针始终为0x00000000?编辑:改写问题:我最初的问题很不清楚,很抱歉。当使用VisualStudio2008调试器单步调试程序时,我可以看到所有变量,但本地对象的成员变量除外。这可能是调试器从this指针导出这些,而VS总是说是0x00000000,所以无法导出当前对象的成员变量(它不知道对象的内存位置)当加载一个巨型转储(类似于Windows小型转储,但包含进

c++ - 什么是 "rvalue reference for *this"?

在clang的C++11statuspage中遇到了一个名为“*this的右值引用”的提议。.我已经阅读了很多关于右值引用并理解它们的内容,但我认为我不知道这一点。我也无法使用这些术语在网络上找到很多资源。页面上有提案文件的链接:N2439(将move语义扩展到*this),但我也没有从那里得到太多示例。这个功能是关于什么的? 最佳答案 首先,“*this的引用限定符”只是一个“营销声明”。*this的类型永远不会改变,请参阅这篇文章的底部。不过用这种措辞更容易理解。接下来,下面的代码根据函数的“隐式对象参数”的ref-qualif

c++ - 什么时候 `this` 是右值?

我知道typeofthis是prvalue(“纯”右值)指针,并且可以通过附加关键字const或使其成为指向const和/或指向volatile的指针(影响对其实例变量的访问)volatile到它所属的函数定义的末尾。我也知道this有时(错误地)被描述为一个const指针,也许是在说“你不能给this赋值”。作为一个右值,它本质上是不可赋值的,因此不需要const右值的概念。我也知道在C++11中,存在右值或左值会影响调用解析的情况,但我已尝试解决这些可能性,但我不确定是否存在这样的情况实际上,调用this是右值指针而不是const左值指针的解析很重要。从程序员的角度来看,是否存在这

c++ - 是否允许用其他类型替换 `this`?

在此问题的评论和答案中:Virtualfunctioncompileroptimizationc++有人认为循环中的虚函数调用不能被去虚拟化,因为虚函数可能会使用放置新的另一个对象替换this,例如:voidA::foo(){//virtualstatic_assert(sizeof(A)==sizeof(Derived));new(this)Derived;}示例来自LLVMblogarticleaboutdevirtualization现在我的问题是:标准是否允许这样做?我可以在cppreference上找到这个关于存储重用:(强调我的)Aprogramisnotrequiredt

c++ - 在编译时测试字节序 : is this constexpr function correct according to the standard?

在寻找一种在编译时检查字节顺序的方法后,我想出了以下解决方案:staticconstinta{1};constexprboolis_big_endian(){return*((char*)&(a))==1;}GCC仅在需要constexpr的某些情况下接受此代码:intb[is_big_endian()?12:25];//worksstd::arrayc;//fails对于第二种情况,GCC说error:accessvalueof'a'througha'char'glvalueinaconstantexpression。我在标准中找不到任何禁止此类事情的内容。也许有人可以澄清在哪种情况

C++ 构造函数 : why is this virtual function call not safe?

这是来自C++11标准sec12.7.4。这比较困惑。文中最后一句话到底是什么意思?为什么最后一个方法调用在B::B不明确的?不应该只是打电话a.A::f?4Memberfunctions,includingvirtualfunctions(10.3),canbecalledduringconstructionordestruction(12.6.2).Whenavirtualfunctioniscalleddirectlyorindirectlyfromaconstructororfromadestructor,includingduringtheconstructionordest

c++ - 错误 : passing 'const …' as 'this' argument of '…' discards qualifiers

error:passing'constA'as'this'argumentof'voidA::hi()'discardsqualifiers[-fpermissive]我不明白为什么会出现这个错误,我没有返回任何东西,只是传递了对象的引用,就是这样。#includeclassA{public:voidhi(){std::cout@edit我使用const正确性修复了它,但现在我试图在同一个方法中调用方法,我得到了同样的错误,但奇怪的是我没有传递对这个方法的引用。#includeclassA{public:voidsayhi()const{hello();world();}voidhel