Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

11
为什么纯虚函数由0初始化?
我们总是将纯虚函数声明为: virtual void fun () = 0 ; 即,始终将其分配为0。 我了解的是,这是将此函数的vtable条目初始化为NULL,此处的任何其他值都会导致编译时错误。这种理解正确与否?

5
main的正确声明是什么?
mainC ++中函数的正确签名是什么?正确的返回类型是什么,从中返回值是什么意思main?允许的参数类型是什么,它们的含义是什么? 这是特定于系统的吗?这些规则是否随着时间而改变?如果我违反了该怎么办?
147 c++  main  c++-faq 

1
为什么会有一个注入的类名?
最近,我看到了一个奇怪的C ++功能:注入的类名。 class X { }; X x1; class X::X x2; // class X::X is equal to X class X::X::X x3; // ...and so on... 但我不知道为什么需要此功能。有没有实践需要此功能? 我听说旧的C ++中不存在此功能。那么,什么时候引入的呢?C ++ 03?C ++ 11?
147 c++ 

7
C ++标记已弃用
我想在便携式C ++中弃用一个接口中的方法。当我用谷歌搜索时,我得到的只是一个针对微软的解决方案。#pragma已弃用,__declspec(已弃用)。 二等奖解决方案是ifdef MSVC和GCC解决方案。 谢谢
147 c++ 

11
在C ++中查找对象的类型
我有一个类A和另一个继承自它的类B,我正在重写一个接受类型为A的对象作为参数的函数,因此我必须接受一个A。但是,我后来调用了只有B具有的函数,因此,如果传递的对象不是B型,我想返回false而不继续。 找出传递给我的函数的对象是哪种类型的最佳方法是什么?
147 c++  types 

6
我为什么要std :: move一个std :: shared_ptr?
我一直在浏览Clang源代码,发现以下代码段: void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = std::move(Value); } 我为什么要std::move一个std::shared_ptr? 在共享资源上转移所有权有什么意义吗? 我为什么不这样做呢? void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = Value; }

6
什么是C ++委托?
C ++中委托的一般想法是什么?它们是什么?它们的用途是什么? 我想首先以“黑匣子”的方式来了解它们,但是对这些东西的勇气有一点了解也是非常有用的。 这并不是最纯净或最纯净的C ++,但我注意到我工作的代码库中有大量的C ++。我希望对它们有足够的了解,因此我可以使用它们,而不必深入研究嵌套模板的可怕问题。 这两篇代码项目文章解释了我的意思,但并没有特别简洁: 成员函数指针和最快的C ++委托 不可能的快速C ++代表

8
迭代时从std :: set中删除元素
我需要遍历一组并删除符合预定义条件的元素。 这是我编写的测试代码: #include <set> #include <algorithm> void printElement(int value) { std::cout << value << " "; } int main() { int initNum[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; std::set<int> numbers(initNum, initNum + 10); // print '0 1 2 3 4 5 6 7 …

2
sjlj vs dwarf vs seh有什么区别?
我找不到足够的信息来确定应该使用哪个编译器来编译我的项目。在不同的计算机上有多个程序可以模拟一个过程。在Linux上,我正在使用GCC。一切都很棒。我可以优化代码,它可以快速编译并使用不太多的内存。 我使用MSVC和GCC编译器做自己的基准测试。稍后的版本会生成稍快的二进制文件(针对每个子体系结构)。尽管编译时间比MSVC多得多。 因此,我决定使用MinGW。但是找不到有关MinGW中异常处理方法及其实现的任何解释。我可以对不同的操作系统和体系结构使用不同的发行版。 注意事项: 编译时间和内存对于我的用法并不重要。唯一重要的是运行时优化。我需要我的程序足够快。慢速编译器是可以接受的。 操作系统:Microsoft Windows XP / 7/8 / Linux 架构:Intel Core i7 / Core2 /和运行XP的非常老的i686:P


10
Linux C ++错误:未定义对“ dlopen”的引用
我使用C ++(Eclipse)在Linux中工作,并且想要使用一个库。Eclipse向我显示了一个错误: undefined reference to 'dlopen' 你知道解决方案吗? 这是我的代码: #include <stdlib.h> #include <stdio.h> #include <dlfcn.h> int main(int argc, char **argv) { void *handle; double (*desk)(char*); char *error; handle = dlopen ("/lib/CEDD_LIB.so.6", RTLD_LAZY); if (!handle) { fputs (dlerror(), stderr); exit(1); } desk= dlsym(handle, "Apply"); if ((error = dlerror()) != NULL) { fputs(error, …
147 c++  linux  eclipse 

13
为什么我不应该包含cpp文件而是使用标头?
因此,我完成了我的第一个C ++编程任务,并获得了成绩。但是根据等级,我为失去了分数including cpp files instead of compiling and linking them。我不太清楚这是什么意思。 回顾一下我的代码,我选择不为我的类创建头文件,而是在cpp文件中完成所有操作(如果没有头文件,它似乎可以正常工作...)。我猜这是一年级学生的意思,是我写了“ #include“ mycppfile.cpp”;“ 在我的一些文件中。 我#include对cpp文件进行处理的原因是:-应该放在头文件中的所有内容都在我的cpp文件中,所以我假装它像头文件一样-以monkey-see-monkey do fashion的方式,我看到了其他头文件被#include放在文件中,所以我对cpp文件也做了同样的操作。 那么,我到底在做什么错,为什么不好呢?
147 c++  header-files 

9
为什么C ++ rand()似乎只生成相同数量级的数字?
在一个用C / C ++编写的小型应用程序中,我遇到了rand函数以及种子的问题: 我想产生一个具有不同阶数的随机数序列,即具有不同的对数值(以2为底)。但是似乎所有产生的数字都是相同的阶次,仅在2 ^ 25和2 ^ 30之间波动。 是因为rand()现在使用Unix时间是一个相对较大的数目吗?我忘记了什么?我rand()刚开始播种一次main()。
146 c++  c  math  random 

10
^ = 32背后的想法是什么,将小写字母转换为大写字母,反之亦然?
我正在解决代码部队上的一些问题。通常我首先检查字符是大写还是小写英文字母,然后减去或加上32以将其转换为相应的字母。但是我发现有人会^= 32做同样的事情。这里是: char foo = 'a'; foo ^= 32; char bar = 'A'; bar ^= 32; cout << foo << ' ' << bar << '\n'; // foo is A, and bar is a 我已经搜索了对此的解释,但没有找到。那为什么行得通呢?

19
超越堆栈采样:C ++ Profiler
黑客的故事 日期是2010年12月2日。圣诞节前的日子不多了,作为Windows程序员,我几乎遇到了一个主要障碍。我一直在使用AQTime,尝试过困倦,发亮和非常困倦,而正如我们所说的,VTune正在安装。我曾尝试使用VS2008 Profiler,但它一直在积极地惩罚着人们,而且常常是不明智的。我使用了随机暂停技术。我已经检查了呼叫树。我已经解雇了功能痕迹。但令人悲伤的事实是,我正在使用的应用程序超过一百万行代码,可能还有价值一百万行的第三方应用程序。 我需要更好的工具。 我已经阅读了其他主题。 我已经尝试了每个主题中列出的每个事件探查器。简直就是必须有比这些笨拙而昂贵的选择更好的东西,或者可笑的工作量几乎没有收益。更复杂的是,我们的代码具有大量线程,并运行许多Qt Event循环,其中某些循环如此脆弱,以至于它们由于时序延迟而在繁重的测试中崩溃。不要问我为什么我们要运行多个事件循环。没有人能告诉我。 在Windows环境中,Valgrind还有更多选择吗? 有没有比我已经尝试过的一堆破烂的工具更好的东西了? 是否有任何旨在与Qt集成的东西,也许可以在队列中显示有用的事件? 我尝试过的工具的完整列表,以及在斜体中真正有用的工具: AQTime:很好!深度递归会遇到一些麻烦,但是在这些情况下,调用图是正确的,并且可以用来消除您可能遇到的任何混乱。不是一个完美的工具,但是值得尝试。它可能适合您的需求,并且在大多数情况下对我来说已经足够了。 调试模式下的随机暂停攻击:没有足够的时间信息。 一个好的工具,但不是一个完整的解决方案。 并行工作室: 核选项。引人入胜,古怪而疯狂。我认为您应该进行30天的评估,并确定是否合适。这也太酷了。 AMD Codeanalyst:很棒 ,易于使用,非常容易崩溃,但是我认为这是环境问题。我建议您尝试一下,因为它是免费的。 卢克·斯塔克沃克(Luke Stackwalker):在小型项目上运行良好,这是在尝试使其在我们的项目上运行。虽然有一些不错的结果,但是它绝对可以代替Sleepy来完成我的个人任务。 PurifyPlus:不支持Win-x64环境,最主要的是Windows7。否则,它非常出色。我在其他部门的许多同事对此表示肯定。 VS2008 Profiler:在功能跟踪模式下以所需的分辨率产生100 + gigs范围的输出。从好的方面来说,产生可靠的结果。 GProf:要求GCC还要适度有效。 VTune:VTune的W7支持犯罪分子的边界。否则优秀 PIN:我需要破解我自己的工具,所以这是最后的选择。 Sleepy \ VerySleepy:对于较小的应用程序很有用,但在这里让我失望。 EasyProfiler:如果您不介意使用一些手动注入的代码来指示要检测的位置,那还不错。 Valgrind:仅* nix,但在那种环境下非常好。 OProfile:仅Linux。 亵渎:他们射击野马。 我没有尝试过的建议工具: XPerf: 发光代码: 开发伙伴: 注意:目前是 Intel环境。VS2008,增强库。Qt 4+。而所有这些令人沮丧的杂物:通过trolltech进行Qt / MFC集成。 现在:大约两周后,看来我的问题已解决。借助各种工具,包括列表中的几乎所有内容以及我的一些个人技巧,我们找到了主要的瓶颈。但是,我将继续测试,探索和尝试新的探查器以及新技术。为什么?因为我欠你们,因为你们摇滚。它确实使时间线放慢了一点,但是我仍然很高兴继续尝试新工具。 简介 在许多其他问题中,最近将许多组件切换到了错误的线程模型,由于下面的代码突然不再是多线程的,导致了严重的问题。我不能说太多,因为它违反了我的NDA,但是我可以告诉您,通过偶然检查甚至常规代码检查都不会发现它。如果没有探查器,通话记录和随机暂停的共同作用,我们仍然会对天空的美丽蓝色弧线大怒。值得庆幸的是,我与一些我见过的最好的黑客一起工作,而且我可以接触到一个充满了强大工具和才华横溢的“诗篇”。 绅士们,我非常感谢您,很遗憾,我没有足够的代表来奖励你们每个人。我仍然认为,这是一个重要的问题,比到目前为止我们在SO上获得的答案更好。 …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.