草庐IT

有的是

全部标签

c++ - 更优化的是,存储参数并传递给函数或通过调用参数传递给函数

C++新手,正在尝试学习优化技术,所以希望有人能为我澄清。这两个选项之间有真正的区别吗:1)存储参数并传递给函数constchar*text=getText(var)doSomething(text);2)传递给参数的函数调用doSomething(getText(var));不幸的是,我没有接受过足够的计算机科学培训,无法在编译阶段意识到差异,所以任何帮助都会很棒! 最佳答案 有一个技术上的区别:在doSomething(getText(var));doSomething的参数是一个右值,而在doSomething(text);参

c++ - 如果重写的 C++ 函数调用父函数,父函数调用另一个虚函数,那么调用的是什么?

我正在学习多态性,我被这种情况搞糊涂了:假设我有以下C++类:classA{...virtualvoidFoo(){Boo();}virtualvoidBoo(){...}}classB:publicA{...voidFoo(){A::Foo();}voidBoo(){...}}我创建了B的一个实例并调用了它的Foo()函数。当该函数调用A::Foo()时,使用的Boo()方法是A类还是B类的方法?谢谢! 最佳答案 除非您使用该类限定函数调用,否则所有方法调用将被平等对待,即如果是虚拟的则动态分配,如果不是虚拟的则静态分配。当您使用

c++ - 为什么这里调用的是 Copy Constructor 而不是普通的 Constructor 和重载的赋值运算符?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:IsthereadifferenceinC++betweencopyinitializationanddirectinitialization?CopyconstructorsandAssignmentOperators我有一个C类,我在其中重载了Normal、复制构造函数和赋值运算符以打印被调用内容的踪迹。我写了以下代码来测试什么时候被调用?Cc1;-->NormalConstuctor..//understoodFineCc2;c2=c1;-->Normalconstructor+assignmentop

c++ - 将现有的 C++ openGL 项目从 glut/freeglut 转换为 glfw

我想将我的科学3D应用程序从Freeglut升级到GLFW,但我担心隐藏的冲突或数据丢失,实际上我的应用程序与Freeglut一起工作时非常棒,我没有任何问题,但推荐使用GLFW所有现代书籍和教程中的现代OpenGL(3.0+)。我查看了GLFWAPI,它看起来像带有glfw*前缀的Glut,但我不太确定。所以我想到了三个问题:IsitworthtobreakmyexistingprojectforGLFWsake,orsticktofreeglut?AmIgoingtolossanyfeaturefromglut?IsGLFWcompatiblewithGTK+?(becausemy

c++ - 无法重载现有的 std::vector 函数

我正在做一个POC实现,根据要求,我需要扩展std::vectorinsertAPI,它只需要一个参数(要插入的值),并且代码会在内部添加这个容器的末端。我创建了一个派生自std::vector的自定义类(ValVector),并定义了一个接受单个参数但在编译时接受的自定义InsertAPI抛出错误。下面是带有错误信息的代码片段:#include#includeusingnamespacestd;typedefboolBOOL;template>classValVector:publicstd::vector{public:BOOLinsert(constT&elem){return(

c++ - 说 xvalues 具有身份并且是可移动的是正确的吗?

根据这份文件:http://www.stroustrup.com/terminology.pdfl值具有同一性且不可移动。公关值是可移动的,但没有身份。x值具有同一性并且是可移动的。关于这些我有几个问题。一个。具有身份的x值的示例是什么?以下是不合法的:Foof;&std::move(f);我可以重载Foo类的&-operator并让它返回this以便以下内容变得合法:&Foo(5);但是像Foo(5)这样的pr-values不能有身份。还是对身份有更微妙的解释? 最佳答案 Stroutrup的TheC++ProgrammingLa

c++ - 如何用 Eclipse 打开现有的 C++ 项目?

我有两个C++项目需要在Windows和Linux中运行和构建。我们使用MicrosoftTFS进行源代码控制。对于Windows,我们使用VisualStudio。对于Linux,我们使用Eclipse。(我对Eclipse没有太多经验)我已设法在两个平台上正确配置和构建项目。我在TFS中检查了来自eclipse的.cproject和.project,所以我可以在另一台计算机上使用它。现在我想在另一台Linux计算机上获取项目,但我不知道该怎么做。我尝试关注thisinstructions,但我没有压缩我的源代码。其他地方如here建议创建一个新项目。Eclipse中有没有类似于Vi

c++ - "§ 27.7.3.6.2/1"指的是什么?

当我阅读一些问题时,我发现人们更喜欢使用“§27.7.3.6.2/1[ostream.inserters.arithmetic]”之类的东西来描述他们的问题。我相信它有与C++相关的东西。这是该问题的链接地址:Formattedoutputarithmeticinserters我想问的是:“§27.7.3.6.2/1”指的是什么?它是指一本书还是其他什么东西?如果是一本书,请告诉我那本书的名字。 最佳答案 他们指的是C++standard. 关于c++-"§27.7.3.6.2/1"指的

c++ - 如何使用 pdb 调试现有的 C++ 可执行文件但没有源代码

我在已编译(Debug模式)的C++项目中工作。我有它的exe文件和pdb文件。我可以从命令行运行exe。如何调试项目?(我没有它的.sln文件。)我在VisualStudio中工作,但我的系统中也有一个cygwin。 最佳答案 从VisualStudio打开可执行文件,使用与打开项目或解决方案相同的方式。这将允许您对其进行调试。(它会在您的exe周围创建一个空的占位符解决方案,您可以在运行exe进行调试时使用它来更改环境变量或命令行参数。) 关于c++-如何使用pdb调试现有的C++可

c++ - 为什么 strlen(s) 与 s 的大小不同,为什么 cout char 显示的是字符而不是数字?

我写了一段代码来计算一堆单词中有多少个'e'字符。例如,如果我键入“Ireadthenews”,则显示有多少e的计数器应该是3。#include#includeusingnamespacestd;intmain(){chars[255],n,i,nr=0;cin.getline(s,255);for(i=1;i关于C++中的字符,我有两个不清楚的地方:在上面的代码中,如果我将strlen(s)替换为255,我的代码将无法正常工作。我只能输入一个字,程序就停止了。我在学校被教导strlen(s)是字符串s的长度,在本例中,正如我声明的那样,它是255。那么,为什么可以我不是只输入255,