Questions tagged «c++»

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

5
将参数作为const传递时是否过早优化?
“过早的优化是万恶之源” 我认为我们都可以同意。我尽力避免这样做。 但是最近我一直想知道通过const Reference而不是Value传递参数的做法。我已经被教导/了解到,非平凡的函数参数(即大多数非原始类型)最好通过const引用传递-我读过的很多书都将其推荐为“最佳实践”。 我仍然不禁感到奇怪:现代的编译器和新的语言功能可以解决奇迹,因此我所学的知识可能已经过时了,而且如果两者之间存在任何性能差异,我实际上也不会费心去剖析。 void fooByValue(SomeDataStruct data); 和 void fooByReference(const SomeDataStruct& data); 我所学的做法是-传递const引用(对于非平凡类型默认为)-过早优化吗?

8
发布版本中应该有断言
assertC ++中的默认行为是在发行版本中不执行任何操作。我认为这样做是出于性能原因,也许是为了防止用户看到讨厌的错误消息。 但是,我认为,那些assert将被触发但被禁用的情况更加麻烦,因为应用程序可能因为某些不变式被破坏而以更糟糕的方式崩溃。 另外,对我而言,性能参数仅在可衡量的问题时才有效。assert我代码中的大多数不会比复杂得多 assert(ptr != nullptr); 这将对大多数代码产生很小的影响。 这使我想到一个问题:断言(意味着概念,而不是特定的实现)是否应该在发布版本中有效?为什么不)? 请注意,此问题不是关于如何在发布版本中启用断言(例如#undef _NDEBUG或使用自定义断言实现)。此外,这不是在第三方/标准库代码中启用断言,而是在我控制的代码中启用断言。

3
谈论C ++“方法”(相对于“成员函数”)有多错误?
我了解,根据C ++规范,不存在“方法”之类的东西,并且一些(很多?大多数?)C ++程序员认为“方法”是一种Java主义。另一方面,即使在C ++论坛上,人们似乎也在谈论方法而不会抽搐。我正在寻找有关此术语的已知约定或惯例。 我正在记录同时具有C ++和Java版本的API。开发人员实际上将类和方法/成员函数的名称在两者之间保持相同,以方便移植和测试。因此,有关这些API的一些文档需要放在语言选择的“上方”。我需要能够大致讨论Foos和Bars及其baz()和mumble()...方法? 如果我谈论Java程序员会认为它很自然的方法,那么看来C ++程序员可能会理解,但是有些人会认为它是不正确的。我的问题是:令人发指这是怎么在实践中?相对于C ++特定的函数,通常如何在“通用OOP”上下文中谈论C ++成员函数?有没有更好的方式来讨论成员函数,而这两种语言都不对吗?(“成员函数”有点冗长。) 这不是意见调查;我正在尝试确定是否存在实际的约定或通用做法来解决此问题。 我知道这个问题,但是它通常是关于OOP的,而不是关于特定语言的。

5
“ #define me(* this)”是个好主意吗?
可以在某些全局头文件中或更佳地将其定义为编译器命令行参数: #define me (*this) 还有一些用法示例: some_header.h: inline void Update() { /* ... */ } main.cpp: #include "some_header.h" class A { public: void SetX(int x) { me.x = x; me.Update(); } void SomeOtherFunction() { ::Update(); } /* 100 or more lines ... */ void Update() { // ... } int x; …
19 c++ 

11
C ++编译器会删除/优化无用的括号吗?
请问代码 int a = ((1 + 2) + 3); // Easy to read 运行慢于 int a = 1 + 2 + 3; // (Barely) Not quite so easy to read 还是现代的编译器足够聪明,可以删除/优化“无用的”括号。 看起来似乎很少有优化方面的问题,但是选择C ++而不是C#/ Java / ...都是关于优化(IMHO)的。

7
模块化编程会影响计算时间吗?
每个人都说我应该使代码模块化,但是如果我使用更多的方法调用而不是更少但更大的方法,效率会降低吗?Java,C或C ++有什么区别? 我知道编辑,阅读和理解起来更容易,尤其是在小组中。那么,与代码整理优势相比,计算时间损失微不足道吗?
19 java  c++  c  efficiency 

3
QT-C ++与通用C ++和STL [关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 5年前关闭。 最近在Ubuntu QQ上刷了我的C ++。我喜欢所有事物的Qt框架,尤其是构建GUI的框架。在过去几年中使用PyQt时,我对它非常熟悉。 当使用PyQt时,我遇到了一些问题,现在将C ++与Qt一起使用时,问题更加明显:Qt对Qt特定的C ++有很多扩展 -QString只是一个常见的例子,更不用说自动垃圾收集了。完全不了解C ++和STL的情况下,可以使用C ++编写Qt应用程序。 我可能很快就要再次进入就业市场,我希望能够考虑C ++的职位-但我担心自己过多地与Qt绑定会限制我使用通用C ++的能力,这曾经非常强大,但是现在长期处于休眠状态且生锈。 我应该避免Qt吗?使用WxWidgets或GTK ++构建GUI会更好吗? 什么是可以使用的最佳GUI框架,该框架允许/要求最多使用通用C ++和STL?在GUI框架等方面,我如何使自己作为C ++程序员最有市场价值?
19 c++  qt  stl  gtk  pyqt4 

6
一种编程语言,允许您为简单类型定义新的限制
许多语言一样C++,C#和Java允许你创建表示简单类型,如对象integer或float。使用类接口,您可以覆盖运算符并执行逻辑,例如检查值是否超过业务规则100。 我想知道在某些语言中是否可以将这些规则定义为变量/属性的注释或属性。 例如,C#您可能会写: [Range(0,100)] public int Price { get; set; } 或者也许C++您可以这样写: int(0,100) x = 0; 我从未见过这样的事情,但是鉴于我们在存储之前对数据验证的依赖程度。奇怪的是,该功能尚未添加到语言中。 您能否举例说明可能的语言?

6
何时支付C ++编译器费用[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 最近,我开始怀疑开发人员何时应该为编译器付费。大多数平台都免费提供编译器,或者容易获得免费版本。 例: OS X-开发人员工具随附GCC和Clang / LLVM。对于如何使用它们以及在其中得到什么,这里没有任何限制。 Linux-GCC,我敢肯定。我不知道linux编译器的当前状态。对于如何使用它们以及在其中得到什么,这里没有任何限制。 Windows-MinGW和Microsoft确实提供了Visual Studio的免费版本。MinGW没有任何限制,但我认为免费的Visual Studio存在严重的限制。 但是,例如,英特尔生产C / C ++编译器。他们的价格很高。在教育方面,我认为可以以49美元的价格获得OS X版本,以129美元的价格获得Windows / Linux。然后,他们也提供完整的“ Studio”产品。显然,使用教育定价会受到限制。 但是我想知道的是,何时应该真正考虑为编译器付费。我能想到的一个例子是电子游戏。如果您使用的是可在主要平台上运行的编译器,则该平台将不再有切换工具。如果工具相同,在平台之间切换似乎会很容易。 任何人都可以在支付诸如英特尔编译器之类的编译器费用方面获得一些启示,以及使用它们可能获得的真正的跨平台收益吗?即使非常努力地不使用平台特定的技术,代码的可移植性也会降低吗?
19 c++  compiler 


6
在C ++开发中放弃STL是否可行?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我知道在某些领域(例如游戏行业),不建议使用STL。所以我的问题是:在某些情况下不使用STL是否真的是一个好习惯?如果是这样,不使用现代C ++的STL的最大原因是什么?
19 c++  stl 

6
在C ++代码中使用C表达式是一种好习惯吗?
尽管我确实比班级领先,但我们还是从今年开始在学校学习C。在班级是C的基础上,我学习了Java,C ++和C。无论如何,我一直在记录自己,读书,文章,我问我的老师为什么我应该学习C,她说这是C ++的基础。刚开始编程时,我发现C ++容易得多,后来又学习了C。但是在书中,您可以看到C代码可以在C ++中运行,但反之则不行。 我的问题很简单〜在C ++中使用C表达式是一种好习惯吗?让我给你举个例子: 该代码应 #include <stdio.h> #include <iostream> int main() { int x; scanf("%d", &x); cout << "The number you entered is " << x << "And it's double is " << x*x; return 0; } 在任何方面都比这更有效率或更好: #include <iostream> int main() { int x; cin >> …
19 c++  c 

5
为什么C ++不能在其概念实现中采用D的方法?
众所周知,概念,C ++约束模板参数可能类型的方法未能包含在C ++ 11中。 我了解到D编程语言2.0的通用编程具有类似的功能。在我看来,其解决方案非常优雅和简单。 所以我的问题是,为什么C ++无法使用类似的方法。 C ++概念的目标可能大于D的实现所提供的目标? 还是C ++的传统使它无法采用这种方法? 还是其他? 感谢您的回答。 ps要查看D的通用编程能力的一些示例,请参阅:https : //stackoverflow.com/questions/7300298/metaprogramming-in-c-and-in-d/7303534#7303534
19 c++  templates  d 

14
大学教授DOS风格的C ++,如何处理它[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 5年前关闭。 我已经编程多年了,但是想要获得文凭以提高自己的就业能力。我曾经上过大学,所以我没有选择一个完整的5年制计算机科学专业,而是选择了一个较短的,面向实际的软件工程程序。 我以为它可能会更多地关注具体技能而不是理论,但是我仍然认为大学和教授喜欢正确,正式和学术的事物。仍然是科学,对不对?错误-我对许多IT课程如此草率感到惊讶。 在编写C ++入门课程中,仅编写了1-2个程序,就对诸如“为什么全局变量不好”和“为什么常量常数好”这样的陈词滥调进行了测试。没有适当背景的随机轶事。包含讲义system(pause/cls),getch和标头如conio.h和iodos.h。任务之一是从32到255打印“ ASCII字符” ,并使用屏幕截图显示使用Windows-1252代码页打印的表格,但完全不提及编码。 问题:当大学/教授似乎在使用劣等和/或过时的工具和方法,并且所教的内容是不正确的边界时,您如何建设性和尊重地对待它(如果有的话)? 一些答案指出,您不应该局限于编程,因为它只是用于学习诸如数据结构和算法之类的主题的工具。我同意这个想法,但是在这种情况下,糟糕的风格背后实际上没有任何这样的计划。大多数课程只会简单地教另一个“工具”,而没有太多的背景理论或任何“大背景”。人们常常觉得他们只是为了提供这样的课程而很快就放在一起了。 我坚持下去,终于毕业了。整个过程中质量仍然很低(有几个例外),其他一些学生对此也有所抱怨。不出所料,我从个人项目和兼职工作中学到的知识比从学校中学到的要多得多,但是,完成学业和贴上“软件学生”的标签对他们自己似乎很有用!
19 c++  teaching 

2
什么是RAII?例子?
总是使用RAII一词时,人们实际上是在谈论解构而不是初始化。我想我对这可能意味着什么有基本的了解,但我不太确定。另外:C ++是唯一的RAII语言吗?Java或C#/。NET呢?
19 c++ 

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.