草庐IT

send_this_email

全部标签

C++ 疯狂 typedef : what is the point of allowing this syntax by the Standard?

老熟人:typedefintcute_int;//cute:commonandfamiliarsyntax.这个语法很完美。没问题。现在,当我们可以像上面那样编写typedef时,那么允许这种语法的意义何在:inttypedefcrazy_int;//crazy:uncommonandunfamiliarsyntax.只是为了迷惑程序员?这种语法是否在任何地方都需要(实际上我们已经使用了前一种)?从编译器的角度你怎么看?他们觉得它可爱还是疯狂?还是对编译器根本不重要?顺便说一句,这段代码来自这里:Useoftypenamekeywordwithtypedefandnew如果您想知道这是

c++ - 在成员函数中返回 *this

我最近使用了一个允许以下语法类型的库:MyClassmyObject;myObject.setMember1("stringvalue").setMember2(4.0f).setMember3(-1);显然,这是通过让setter返回MyClass&type;来实现的。像return*this之类的东西。我喜欢这段代码的样子,但我看的不多。发生这种情况时,我通常会怀疑为什么。那么,这是一种不好的做法吗?这样做有什么影响? 最佳答案 这有时被称为NamedParameterIdiom或方法链。这不是坏习惯,它可以提高可读性。考虑从C

c++ - 在成员函数中返回 *this

我最近使用了一个允许以下语法类型的库:MyClassmyObject;myObject.setMember1("stringvalue").setMember2(4.0f).setMember3(-1);显然,这是通过让setter返回MyClass&type;来实现的。像return*this之类的东西。我喜欢这段代码的样子,但我看的不多。发生这种情况时,我通常会怀疑为什么。那么,这是一种不好的做法吗?这样做有什么影响? 最佳答案 这有时被称为NamedParameterIdiom或方法链。这不是坏习惯,它可以提高可读性。考虑从C

c++ - "error: stray '\XXX ' in C++ program": Why does this happen?

我正在用C++编写一个小程序,遇到一个奇怪的错误:src/Makefile/Tool.cpp:42:3:error:stray‘\302’inprogramsrc/Makefile/Tool.cpp:42:3:error:stray‘\240’inprogram我正在用Vim编写这个程序,对应的行(显示隐藏字符)是:>--->---std::vector{"--debug"}$这个问题不是关于解决这个错误的,因为我只需要复制该行并且错误原因就消失了。似乎是某些字符在激活所有相关选项后被Vim隐藏了!问题是可能导致这些错误的原因。 最佳答案

c++ - "error: stray '\XXX ' in C++ program": Why does this happen?

我正在用C++编写一个小程序,遇到一个奇怪的错误:src/Makefile/Tool.cpp:42:3:error:stray‘\302’inprogramsrc/Makefile/Tool.cpp:42:3:error:stray‘\240’inprogram我正在用Vim编写这个程序,对应的行(显示隐藏字符)是:>--->---std::vector{"--debug"}$这个问题不是关于解决这个错误的,因为我只需要复制该行并且错误原因就消失了。似乎是某些字符在激活所有相关选项后被Vim隐藏了!问题是可能导致这些错误的原因。 最佳答案

C++ 使用 "this"对象的 static_cast 和 const_cast 添加 const-ness 之间的区别?

按照ScottMeyers的说法,为防止在getter的const版本和getter的非常量版本中重复代码,请从非常量版本调用方法的const版本:static_cast(*this).Methodology();然而,由于过度使用VisualAssistXIntellisense导致意外使用,我输入了:const_cast(*this).Methodology();而且效果很好。在这种情况下,使用特定类型转换有什么不同?使用的IDE:VisualStudio2010。 最佳答案 假设this的类型是A*,没有区别。通常const_

C++ 使用 "this"对象的 static_cast 和 const_cast 添加 const-ness 之间的区别?

按照ScottMeyers的说法,为防止在getter的const版本和getter的非常量版本中重复代码,请从非常量版本调用方法的const版本:static_cast(*this).Methodology();然而,由于过度使用VisualAssistXIntellisense导致意外使用,我输入了:const_cast(*this).Methodology();而且效果很好。在这种情况下,使用特定类型转换有什么不同?使用的IDE:VisualStudio2010。 最佳答案 假设this的类型是A*,没有区别。通常const_

c++ - 为什么只有在符合 "this"条件时,数据成员的模板函数才是从属名称?

structBar{templatevoidbaz(){}};templatestructFoo{Barbar;Foo(){bar.baz();}};intmain(){return0;}这段代码编译得很好(在GCC4.7中),但是如果我在调用前加上bar.baz()与this->,baz成为需要用template消除歧义的从属名称.bar.baz();//OKthis->bar.baz();//errorthis->bar.templatebaz();//OK当然this->bar只能引用Barbar,其成员baz显然是一个模板?为什么要添加this->让这个代码对编译器产生歧义?附

c++ - 为什么只有在符合 "this"条件时,数据成员的模板函数才是从属名称?

structBar{templatevoidbaz(){}};templatestructFoo{Barbar;Foo(){bar.baz();}};intmain(){return0;}这段代码编译得很好(在GCC4.7中),但是如果我在调用前加上bar.baz()与this->,baz成为需要用template消除歧义的从属名称.bar.baz();//OKthis->bar.baz();//errorthis->bar.templatebaz();//OK当然this->bar只能引用Barbar,其成员baz显然是一个模板?为什么要添加this->让这个代码对编译器产生歧义?附

c++ - 在 C++ 中返回 "this"?

在Java中,您可以简单地returnthis来获取当前对象。你如何在C++中做到这一点?Java:classMyClass{MyClassexample(){returnthis;}} 最佳答案 嗯,首先,您不能从void-returning函数返回任何内容。有三种方法可以返回提供对当前对象的访问的东西:通过指针、通过引用和通过值。classmyclass{public://Returnbypointerneedsconstandnon-constversionsmyclass*ReturnPointerToCurrentObje