草庐IT

this-reference

全部标签

c++ - 数组 : Storing Objects or References

作为一名Java开发人员,我有以下C++问题。如果我有类型A的对象并且我想将它们的集合存储在一个数组中,那么我应该只存储指向对象的指针还是存储对象本身更好?在我看来,存储指针更好,因为:1)通过将对象的指针设置为null,可以很容易地删除对象2)节省空间。 最佳答案 指针还是对象?在C++中不能将引用放在数组中。您可以制作一个指针数组,但我仍然更喜欢容器和实际对象而不是指针,因为:没有机会泄漏,异常安全更容易处理。它并没有减少空间——如果你存储一个指针数组,你需要对象的内存加上指针的内存。我唯一提倡将指针(或智能指针会更好)放入容器

c++ - 如果我在 lambda 函数中使用 [this] 而不是 [=] 是否有任何性能提升?

据我了解,[=]复制函数体内使用的所有变量,而[this]仅复制this指针。但是查看示例,我发现[=]被广泛使用,其中[this]或[this,foo]就足够了。是否有任何理由(例如性能提升)使用[this]而不是[=]? 最佳答案 没有性能提升,因为正如您所说,只有您在lambda中实际使用的变量会被复制用于[=]。†这主要是编码人员的懒惰和保持lambda头的简洁。如果您使用新变量,则必须扩展捕获子句以包含这些变量,等等。然而,有时,您希望/必须是明确的,例如当您想要混合按引用和按值捕获时。†请注意,目前,以下代码段中的[=]

C++ this指针总是const

对于类X的非const成员函数,this指针的类型为X*const。然后,成员函数的this指针始终为const。那么,我们是否总是需要像这样进行const转换:voidfoo::p(){const_cast(member)=1;}我是不是漏掉了什么? 最佳答案 ForanonconstmemberfunctionofclassX,thispointerisoftypeX*const.不,非const成员函数中的this指针的类型只是X*(而且它是一个右值)。但即使this是X*const,这仍然不会阻止您更改数据成员。您的代码示例

c++ - 如果在类中不使用 "this"会发生什么情况?

假设我有以下类(class):classfoo{public:intsomeNum;voidcalculation(intsomeNum);};定义:voidfoo::calculation(intsomeNum){someNum=someNum;}现在在someNum=someNum行中,指的是哪个someNum?如果我这样做:this->someNum=someNum那第二个someNum是什么?避免这个问题的好的命名风格是什么?例如,在objective-c中,在成员变量名前加上前缀“_”。(例如:_someNum); 最佳答案

c++ - enable_shared_from_this 需要什么?

这个问题在这里已经有了答案:Whatistheusefulnessof`enable_shared_from_this`?(6个答案)关闭6年前。我是C++11的新手,我遇到了enable_shared_from_this。我不明白它试图达到什么目的?所以我有一个使用enable_shared_from_this的程序。structTestCase:enable_shared_from_this{std::shared_ptrgetptr(){returnshared_from_this();}~TestCase(){std::coutobj1(newTestCase);std::sh

c++ - 如何在编译时检测 C++ 中的 std::reference_wrapper

假设我们有一些可变参数模板,需要以不同方式处理std::reference_wrapper参数。我们怎样才能做到这一点? 最佳答案 你可以做一个特征来判断一个类型是否是reference_wrappertemplatestructis_reference_wrapper:false_type{};templatestructis_reference_wrapper>:true_type{};然后你可以用它来消除歧义:templatevoiddo_stuff(T&&t,false_type){coutvoiddo_stuff(T&&r

c++ - 将 "this"转换为引用指针

假设我有一个结构structFoo{voidbar(){do_baz(this);}/*Seeeditbelowvoiddo_baz(Foo*&pFoo){pFoo->p_sub_foo=newFoo;//forexample}*/Foo*p_sub_foo;}GCC告诉我temp.cpp:Inmemberfunction‘voidFoo::bar()’:temp.cpp:3:error:nomatchingfunctionforcallto‘Foo::do_baz(Foo*const)’temp.cpp:5:note:candidatesare:voidFoo::do_baz(Foo

c++ - 关于在 C++ 中将默认构造函数分配给 *this 的问题?

我正在阅读一些C++文本。在一个例子中,文本写成:classStudent{intno;chargrade[M+1];public:Student();Student(int,constchar*);constStudent&set(int,constchar*);voiddisplay()const;};Student::Student(){no=0;grade[0]='\0';}Student::Student(intn,constchar*g){*this=Student();//initializetoemptyset(n,g);//validate,resetifok}我不明

c++ - 编译器是否假定 "this"在 Debug模式下不是 nullptr?

我想知道在每个成员函数上放置assert(this!=nullptr);是否是个好主意。我相信编译器可以决定完全忽略这个断言,因为假设this不能为null,所以断言总是true并且可以在编译时解决-时间。但是如果编译器没有做出这个假设,那么这个断言对于及早发现问题非常有用。编译器会这样假设吗? 最佳答案 不,编译器通常不会这样假设。这些检查甚至还有商业代码,其中一些不仅断言而且实际上是逻辑。if(!this){doSomeWork();。虽然您无法在不遇到未定义行为的情况下达到this为NULL的情况,但如果您充分了解实现细节,那

C++ 错误 : ‘_mm_sin_ps’ was not declared in this scope

我正在尝试对将函数应用于数组的不同方法进行基准测试。为什么是https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=3260,2124,4779,4779&cats=Trigonometry&text=_sin_mm_sin_ps在我的范围内未知,但_mm_sqrt_ps是?我如何让它为人所知?并编译无误。#include#include#include#include#include#include#include"immintrin.h"#includeintmain(){std::coutdis(-