草庐IT

c++ - 'return *this' 在 C++ 中是什么意思?

我正在将C++程序转换为C#,但这部分让我感到困惑。return*this是什么意思?templateclassCDemoMessagePB:publicIDemoMessage,publicPB_OBJECT_TYPE{(...)virtual::google::protobuf::Message&GetProtoMsg(){return*this;}}它将如何转化为C#? 最佳答案 this表示指向对象的指针,所以*this是一个对象。因此,您要返回一个对象,即*this返回对该对象的引用。

c++ - std::cout 是否有返回值?

我很好奇std::cout是否有返回值,因为当我这样做时:cout打印了一些十六进制代码。这个打印出来的值是什么意思? 最佳答案 因为cout的操作数是用户定义的类型,表达式实际上是一个函数调用。编译器必须找到最好的operator匹配操作数,在本例中都是std::ostream类型.有许多候选运算符重载可供选择,但我将只描述按照通常的重载解析过程最终被选中的那个。std::ostream有一个转换运算符,允许转换为void*.这用于启用测试流的状态作为bool条件(即,它允许if(cout)工作)。右手操作数表达式cout隐式转换

c++ - 使用 std::function 时如何解决此 <unresolved overloaded function type> 错误?

在以下(有效的)代码示例中,模板化的register_enum()函数用于迭代枚举并调用用户提供的回调以将枚举值转换为C字符串。所有枚举都在一个类中定义,枚举到字符串的转换是使用静态to_cstring(enum)函数完成的。当一个类(如下面的着色器类)有多个枚举和相应的重载to_cstring(enum)函数时,编译器无法决定将哪个是正确的to_cstring()函数传递给register_enum()。我认为代码比我能解释得更好...#include#include//ActualcodeusesLua,butforsimplification//I'llhideitinthise

c++ - 经典C++(C with Classes)的Call/Return特性,现代语言有哪些?

在TheDesignandEvolutionofC++的第57页上,Dr.Stroustrup谈到了一个功能,该功能最初是CwithClasses的一部分,但它不是现代C++(标准C++)的一部分。该功能称为call/return。这是一个例子:classmyclass{call(){/*dosomethingbeforeeachcalltoafunction.*/}return(){/*dosomethingelseaftereachcalltoafunction.*/}...};我觉得这个功能非常有趣。有没有现代语言有这个特殊的功能? 最佳答案

c++ - 如何使用运算符<<打印类对象

我想为AutoData类编写一个打印函数,其中包含有关汽车的信息。使用此打印功能,理想情况下我想打印出一个包含许多不同类对象的vector。我已经为对象的每个元素编写了get函数,但我仍然不确定如何使用这些函数编写一个函数来以下列格式打印出数据:mpg:cylinders:displacement:horsepower:weight:acceleration:modelYear:origin:carName例如:10.0:8:360.0:215.0:4615.:14.0:70:1:fordf25010.0:8:307.0:200.0:4376.:15.0:70:1:chevyc2011

C++11 对 lambda 返回类型的限制

我正在阅读cppreference关于如何推导出C++11lambda的返回类型:ifthebodyconsistsofthesinglereturnstatement,thereturntypeisthetypeofthereturnedexpression(afterrvalue-to-lvalue,array-to-pointer,orfunction-to-pointerimplicitconversion)所以我认为这意味着一个lambda只能有一个return语句。但为什么它仍然适用于多个return语句?这compiles在两个编译器上:autof=[](boolc1,b

C++11 lambda 表达式——捕获与参数传递

考虑一个比较正整数的函数;该函数本身使用lambda来完成这项工作..//Passn1,n2byvaluetothelambda.boolCompare(intn1,intn2){return[](intn1,intn2){returnn1>n2;};}上面的代码片段编译得很好;虽然Compare()总是返回true;然而,下面的代码甚至无法编译——//capturingvaluesboolCompare(intn1,intn2){return[n1,n2]()->bool{returnn1>n2;};}并返回错误lambda.cpp:48:46:error:cannotconvert

c++ - 返回一个临时对象是否会在 C++ 中创建一个临时对象?

考虑以下C++代码:structA{A(int);};Afoo(){returnstatic_cast(0);}Ax=foo();在这里static_cast(0)根据标准[5.2.9-4]创建一个临时对象,它是纯右值。标准[12.2-1]说Temporariesofclasstypearecreatedinvariouscontexts:bindingareferencetoaprvalue(8.5.3),returningaprvalue(6.6.3),aconversionthatcreatesaprvalue(4.1,5.2.9,5.2.11,5.4),throwinganex

C++ - const 成员/返回 const int& 与 return int

那些C++行是什么意思?是否有其他方式来编写它们?constint&a()const;intgetA()const;谢谢。 最佳答案 这两个是promise不更改对象本身的类中成员函数的两个可能签名。在第一种情况下,它将返回一个对整数(可能是成员属性)的常量引用,引用是const意味着调用者将无法使用它来更改内部属性。第二种情况它按值返回一个整数。在语义上略有不同,但大多数情况下它们并不重要,将它们视为两个获取值的函数。对于它会有所作为的情况,请参见:classtest{public:test():m_value(){std::co

c++ - 返回具有不同模板参数值的不同类型(但类型相同)

我想做的是定义3个这样的函数:templateinttest(){return8;}templatefloattest(){return8.8;}templatestd::stringtest(){return"8.9";}intmain(){inta=test();floatb=test();std::stringc=test();return0;}它们使用相同类型的模板参数但返回不同的类型。我相信一定有某种方法可以做到这一点(就像std::get()那样),但我找不到如何去做。 最佳答案 在我看来,您似乎在进行函数模板特化。需要