草庐IT

c++ - 何时不在 C 中创建单独的接口(interface) (.h) 和实现 (.c)?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion我目前正在过渡到使用C语言工作,主要专注于开发大型库。我曾使用C++进行大量基于应用程序的编程,尽管我不能声称精通这两种语言。我很好奇的是,许多流行的开源库何时以及为什么选择不将它们的代码与.h文件和相应的.c文件以1-1的关系分开——即使在.c文件不存在的情况下'生成可执行文件。在过去,我被引导相信以这种方式构建代码不仅在组织上是最佳的,而且对于链接目的也是最佳的——我不明白C语言缺少O

c++ - 如何以及何时正确使用 *this 指针和参数匹配?

当我浏览同事编写的代码时,在某些地方,他们使用:this->doSomething();//-->caseAdoSomething();//-->caseB事实上我不确定*this指针的用途...:(另一个参数匹配问题:obj.doOperation();//-->caseC(&obj)->doOperation();//-->caseD其实这两种情况都在执行想要的操作,难道只是一种让代码看起来更复杂的方法吗?您对以上两个问题有何建议?什么时候使用它们比较合适?为什么? 最佳答案 这不是您问题的答案,而是说明两个片段可能做不同的事情

c++ - 基本 C++ 类型何时具有未知的初始值?

什么时候基本的C++类型(例如int或float)具有未知的初始值?内存分配类型如何影响(如果有的话)?声明呢?如果它是class/struct/union的成员怎么办?C++11与C++03或C++98有什么不同?我有我的怀疑,但不知道我的知识是否完整(或正确,就此而言) 最佳答案 任何POD数据(包括所有基本类型)在以下情况下将具有未知值:它没有staticmemoryallocation(它是在堆栈上或使用new创建的)未初始化,包括空初始化和/或构造函数初始化列表在调用main之前,作为启动过程的一部分,所有类型的全局/静态

c++ - cv::String 和 std::string:何时使用哪一个以及同时使用两者的必要性?

在OpenCV项目中,通常cv::String用于函数,例如一个简单的putText。但是,当使用std的函数时,std::string是负责的。例如。在这种情况下ifstreamstream(filepath);stringline;getline(stream,line,'\n');std::string是必需的,因为cv::String会抛出错误。在反之亦然的情况下,使用OpenCV函数std::string被正确转换为cv::String并且以下代码有效:stringStr="Test";putText(img,Str,Point(10,10),FONT_HERSHEY_PLA

c++ - sprintf 何时以及为何会失败?

我正在使用swprintf将字符串构建到缓冲区中(使用循环等)。constintMaxStringLengthPerCharacter=10+1;wchar_t*pTmp=pBuffer;for(size_ti=0;i=0);pTmp+=nWritten;}*pTaskPlayers='\0';如果在测试期间断言从未命中,我能否确定它永远不会在实时代码中命中?也就是说,我是否需要检查nWritten什么情况下可以返回-1?该文档或多或少只是说明“如果函数失败”。在一个地方,我读到如果它不能匹配参数(即可变参数的格式化字符串),它将失败,但我并不担心。在这种情况下,我也不担心缓冲区溢出-

c++ - 如何以及何时分配全局或静态数组的内存?

当在C++中定义一个全局或静态数组时,它的内存不会在程序开始时立即保留,而是只有在我们写入数组时才会保留。让我惊讶的是,如果我们只写入数组的一小部分,它仍然不会保留整个内存。考虑以下稀疏写入全局数组的小示例:#include#include#defineMAX_SIZE250000000doubleglobal[MAX_SIZE];intmain(intargc,char**argv){if(argc\n",argv[0]);exit(EXIT_FAILURE);}size_tstep_size=atoi(argv[1]);for(size_ti=0;i现在针对不同的步长执行此操作并查

c++ - 何时通过引用传递和返回 C++ 中的函数

首先,我用C++创建了一个复杂的类,它有两个成员数据——实数和虚数。(形式为a+ib)。当我尝试为复杂类对象重载friendostreamoperator在.cpp文件中,它不起作用,而是打开一个ios_base文件并在那里显示错误。但是当我按引用传递并按引用返回时,相同的代码完美地重载了ostream&operator我不明白通过引用传递和返回有什么帮助? 最佳答案 std::ostream是not-copyabletype类型。您不能复制o,因此您必须通过引用接收它并通过引用返回它。

c++ - 可变长度数组何时合法?

我不是C++专家,但据我所知这段代码应该会失败,因为size不是常量:#includeusingnamespacestd;intmain(intargc,char**argv){intsize=*argv[1]-48;chararray[size];cout当我用gcc(最好是g++)编译它时,为什么它可以工作?./test77/test22 最佳答案 要从堆栈或堆中为变量分配内存,需要知道变量的大小。C++编译器可以自行决定如何分配内存,但C++已经公开了他们希望C++编译器如何处理这种情况,因此C++标准要求编译器供应商公布他们

c++ - 获取唯一编号并知道它们何时被释放

我有一个物理模拟(使用Box2D),其中具有相同整数ID的物体不会发生碰撞,例如,属于同一角色的物体。我有一个问题,因为我需要能够为每个可能的实体获得一个唯一的编号,这样就不会有两个字符意外地获得相同的ID。物体的数量是有限的,但它们是根据模拟指令创建和销毁的,因此一旦它们所属的物体消失,就有必要释放唯一的ID。A类World负责创建和销毁所有物体,也是管理唯一数字生成的实体,以及与物理模拟相关的任何其他内容。到目前为止,我想到了两种方法,但我不确定哪种方法更好,如果有的话:保留vector,数据是float的引用数,vector中的位置是ID本身。这种方法的缺点是在编写操作组ID的实

c++ - 何时在游戏开发中使用 C++ 指针

我看过很多文章,大多数都讲了同一个故事:除非万不得已,否则不要使用指针。来自C#/Java背景,其中内存全部被管理,我完全不知道什么时候适合使用指针,除了这些情况:动态内存(如可变大小数组)多态性还有什么时候我会使用指针,尤其是在gamedev的上下文中? 最佳答案 “不要使用指针,它们很慢”没有意义(至少在C++中没有)。这就像在说,“不要使用变量,它们很慢”。您是说“不要使用动态内存分配”吗?如果是这样:我认为你现在不应该担心它。先写代码,再优化。或者您的意思是说,“不要使用原始指针(即类型foo*)”,这需要new和删除?如果