Questions tagged «c++»

有关C ++的问题,C ++是一种静态类型,自由格式,多范式,已编译的通用编程语言。

4
前向声明与包含
Reduce the number of #include files in header files. It will reduce build times. Instead, put include files in source code files and use forward declarations in header files. 我在这里阅读。http://www.yolinux.com/TUTORIALS/LinuxTutorialC++CodingStyle.html。 因此它说如果头文件中的类(类A)不需要使用某个类(类B)的实际定义。那时我们可以使用前向声明,而不是包括特定的(B类)头文件。 问题:如果标头中的类(类A)没有使用特定类(类B)的实际定义,那么正向声明如何帮助减少编译时间?
18 c++  coding-style 

6
是否可以将C ++与.NET框架一起使用?
我已经阅读了许多有关C#和C ++中GUI编程的评论。我注意到Microsoft的.NET框架对于GUI编程非常强大。那么可以使用C ++和.NET框架吗? 我认为这将是一个很好的组合,因为C ++是功能强大的语言,并且如我所读,.NET框架是Windows上GUI编程的首选。是否可以用C#编写GUI和使用C ++编写功能?
18 c++  .net 

4
用C ++编写词法分析器
有哪些关于如何使用C ++编写词法分析器的好资源(书籍,教程,文档),有哪些好的技术和实践? 我在互联网上看过,每个人都说要使用像lex这样的词法生成器。我不想这样做,我想手动编写一个词法分析器。
18 c++  compiler  lexer 

3
运输测试代码。你为什么不呢?
我想将测试代码与产品一起提供。具体来说,提供一个选项,以便拥有我们程序副本的任何人都可以单击“自检”按钮或在命令行上通过--self-test并运行完整的单元| 集成测试。 我主要是想这样做,以帮助调试在现场发现的问题,因此,当最终用户收到错误报告时,“并且这三项测试在我的计算机上都失败了”,这有可能会为它提供支持。我希望手动测试仪能够运行该单元| 集成测试。 但是,团队的测试认为测试代码不是生产代码,因此不应发货。因为大多数开源项目都附带了一个测试套件,所以我并没有真正理解这个论点。在封闭的软件中,这确实不寻常。 我想为论证的任何方面提供证据或轶事。我已经最好地猜测了哪个堆栈交换站点最合适,但是如果这不合适,请告诉我。

5
枚举会创建脆弱的接口吗?
考虑下面的示例。对ColorChoice枚举的任何更改都会影响所有IWindowColor子类。 枚举会导致界面脆弱吗?是否有比枚举更好的东西可以提供更多的多态灵活性? enum class ColorChoice { Blue = 0, Red = 1 }; class IWindowColor { public: ColorChoice getColor() const=0; void setColor( const ColorChoice value )=0; }; 编辑:很抱歉使用颜色作为我的示例,这不是问题所在。这是一个不同的示例,它避免出现红色鲱鱼,并提供有关灵活性的更多信息。 enum class CharacterType { orc = 0, elf = 1 }; class ISomethingThatNeedsToKnowWhatTypeOfCharacter { public: CharacterType getCharacterType() const; void setCharacterType( const CharacterType …

2
在连接相邻的字符串文字时
C和C ++将相邻的字符串文字编译为单个字符串文字。例如: "Some text..." "and more text" 等效于: "Some text...and more text" 在其他C系列语言(如C#或Java)中,这是一种语法错误(顺便说一句很好)。 C和C ++这样做的理由/历史原因是什么?

4
关于功能的这些答案中哪一个是不正确的?
因此,当我进行长时间的编译时,我决定对ODesk进行C ++通用测试,并遇到了这个问题。 如果我没记错的话,考虑到措辞(或缺乏措辞),所有这些都是正确的。 一种。 int Foo() { } int Foo(int bar) { } b。 嗯,return void;在语义上会不正确,但是函数显然可以具有void返回类型。 void Foo() { } C。这是内联函数的定义,是的。 d。 在不详细说明以下元素的位置的情况下, typedef void (*Func)(int); Func functions[2]; void Foo(int bar) { } void Bar(int foo) { } functions[0] = &Foo; functions[1] = &Bar; 此外,您始终可以使用lambda和functors进行此操作。 e。 void Foo(int& bar) { …
17 c++ 

4
将类似C ++的const引入语言有什么问题?
我对C ++的想法感兴趣,而const不是特定的执行(例如Castingaway const)。 以C#为例-它缺少类似于C ++的const,其原因是通常的-人员和时间。在这里,另外,似乎C#团队研究了C ++的const市场营销CLR 执行情况,并且在这一点上已经足够了(请参阅为什么在c#和const参数中没有const成员方法;谢谢Svick)。如果我们走得更远,还有其他吗? 还有更深的东西吗?以多重继承为例-通常(对于用户)它很难理解,因此没有添加到语言中(例如钻石问题)。 在《自然》杂志中是否存在某种const问题,那就是让语言最好避免这种问题?像确定const是深还是浅之类的东西(有了const容器,这意味着我也不能添加新元素或更改现有元素;如果元素属于引用类型怎么办)? 更新:虽然我提到C#,因此从历史的角度出发,但我对const语言潜在问题的性质感兴趣。 这不是语言的挑战。请忽略当前趋势或受欢迎程度等因素-我只对技术问题感兴趣-谢谢。

5
在C ++中为所有对象使用对象(而不是原始类型)是否有意义?
在我最近从事的项目中,我不得不使用很多看起来像这样的函数: static bool getGPS(double plane_latitude, double plane_longitude, double plane_altitude, double plane_roll, double plane_pitch, double plane_heading, double gimbal_roll, double gimbal_pitch, double gimbal_yaw, int target_x, int target_y, double zoom, int image_width_pixels, int image_height_pixels, double & Target_Latitude, double & Target_Longitude, double & Target_Height); 所以我想重构它看起来像这样: static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle, PixelCoordinate …

3
您将如何对OpenGL的图形代码进行单元测试或执行最有效的自动化测试?
我在C ++中的OpenGL之上编写游戏和随附的图形引擎。我也是良好的编码过程和自动化测试的粉丝。图形输出+测试似乎几乎是不混溶的,因为输出通常仅是可视的,或者非常注重视觉。 例如,想象一下按字节分析渲染到屏幕上的原始图像流-您需要与之比较的测试数据,这很难创建/获取,并且通常渲染的图像在屏幕上并不相同。在不同时间运行时的字节级别-算法中的微小变化将完全破坏该方法。 我正在考虑创建一个可视化的单元测试套件,在其中基本上可以渲染不同的测试场景,显示诸如阴影贴图,动画等之类的内容。作为CI的一部分,这些场景随后将被渲染为视频。具有不同指标的文件(或可能将其保留为可执行文件)。这仍然需要对视频文件进行手动检查,但至少会实现某种程度的自动化和标准化。 你怎么看?我希望有更好的方法?

4
C ++中move构造函数的动机和使用
最近,我一直在阅读有关C ++中的move构造函数的信息(请参见例如此处),我试图了解它们的工作方式以及何时使用它们。 据我了解,移动构造函数用于缓解由于复制大型对象而导致的性能问题。维基百科页面上说:“ C ++ 03的一个长期性能问题是,当对象按值传递时,可能隐式地发生昂贵且不必要的深拷贝。” 我通常会解决这种情况 通过引用传递对象,或 通过使用智能指针(例如boost :: shared_ptr)来传递对象(智能指针而不是对象被复制)。 在哪种情况下上述两种技术还不够,而使用move构造函数更方便?

4
在C ++中使用`using`还是避免使用?
由于ADL造成了语义上的细微差别,我通常应如何使用using?为什么?是否与情况有关(例如,标头为#included而源文件为d)? 另外,我该选择::std::还是std::? 命名空间级别using namespace: using namespace std; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); } 完全明确: std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { return std::make_pair(s.begin(), s.end()); } 命名空间级别的使用声明: using std::pair; using std::string; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); } 局部函数使用声明: std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { …
17 c++  namespace 


13
#define的适当使用是否可以简化重复代码的键入?
对于使用#define定义完整的代码行来简化编码是否有好的看法还是有什么看法?例如,如果我需要一起打印一堆单词,我会很讨厌打字 << " " << 在cout语句中的单词之间插入空格。我可以做 #define pSpace << " " << 和类型 cout << word1 pSpace word2 << endl; 对我来说,这既不会增加代码的清晰度,也不会减少代码的清晰度,并且使键入变得更加容易。在其他情况下,我可以想到在哪里键入通常会更容易进行调试。 有什么想法吗? 编辑:感谢所有的伟大的答案!在进行了很多重复的键入后,这个问题才出现在我的头上,但是我从没想过会使用其他的,不那么混乱的宏。对于不想阅读所有答案的人,最好的选择是使用IDE的宏来减少重复的键入。

3
GDB如何暂停执行
您可能知道,我们可以使用GDB并在代码上设置断点来暂停执行以进行调试。 我的问题是,GDB如何暂停进程,并允许您使用i r例如查看寄存器的内容。这些寄存器不是经常被其他OS进程使用吗?他们怎么不被覆盖? 它只是内容的快照,而不是实时数据吗?
16 c++  debugging 

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.