Questions tagged «c++»

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

7
我应该用/ MD或/ MT编译吗?
在Visual Studio中,有编译标志/ MD和/ MT,可让您选择所需的C运行时库。 我了解实现上的区别,但仍不确定要使用哪个。优点/缺点是什么? 我听说过的/ MD的一个优点是,它允许某人更新运行时(例如修补安全问题),并且我的应用程序将从此更新中受益。尽管对我而言,这似乎是一个无功能:我不希望人们在不让我针对新版本进行测试的情况下更改运行时! 我有些好奇的事情: 这将如何影响构建时间?(大概/ MT慢一点?) 还有哪些其他含义? 大多数人使用哪一个?

12
在C ++程序中使用scanf()比使用cin更快?
我不知道这是不是真的,但是当我在一个提供问题的网站上阅读常见问题解答时,我发现了一些东西,引起了我的注意: 检查您的输入/输出方法。在C ++中,使用cin和cout太慢。使用这些,您将保证无法用大量输入或输出解决任何问题。请改用printf和scanf。 有人可以澄清一下吗?在C ++程序中使用scanf()真的比使用cin >>更快吗?如果是,那么在C ++程序中使用它是否是一个好习惯?我以为这是C特定的,尽管我只是在学习C ++。
126 c++  c  performance  io 

4
何时使类型在C ++ 11中不可移动?
令我惊讶的是,它没有出现在我的搜索结果中,考虑到C ++ 11中移动语义的用处,我想有人会问过这个问题: 什么时候需要(或者对我来说是个好主意)使类在C ++ 11中不可移动? (原因等比现有的代码,也就是兼容性问题。)




4
问:如何处理用户按下“ X”(关闭)按钮的事件?
我正在使用Qt开发应用程序。我不知道哪个插槽对应于“用户单击窗口框架的'X'(关闭)按钮”事件,即此按钮: 如果没有用于此的插槽,那么有人可以建议我其他一些方法,以便在用户按下关闭按钮后启动功能。
126 c++  qt 


29
如何在(非托管)代码中检测/避免内存泄漏?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 在非托管C / C ++代码中,检测内存泄漏的最佳实践是什么?和编码指南要避免?(好像就是这么简单;) 过去,我们使用了一些愚蠢的方法:每个内存分配调用都有一个计数器递增,释放时递减。在程序结束时,计数器值应为零。 我知道这不是一个好方法,而且有一些问题。(例如,如果您要释放由平台API调用分配的内存,则您的分配计数将与您的释放计数不完全匹配。当然,然后,在调用分配了内存的API调用时,我们会增加计数器。) 我期待您的经验,建议,以及一些简化此工具的参考。
125 c++  c  memory-leaks 

15
我应该使用#define,enum还是const?
在我正在研究的C ++项目中,我有一个标志类型的值,可以有四个值。这四个标志可以组合。标志描述数据库中的记录,可以是: 新纪录 删除记录 修改记录 现有记录 现在,对于每条记录,我希望保留此属性,因此可以使用一个枚举: enum { xNew, xDeleted, xModified, xExisting } 但是,在代码的其他位置,我需要选择对用户可见的记录,因此我希望能够将其作为单个参数传递,例如: showRecords(xNew | xDeleted); 因此,似乎我有三种可能的解决方法: #define X_NEW 0x01 #define X_DELETED 0x02 #define X_MODIFIED 0x04 #define X_EXISTING 0x08 要么 typedef enum { xNew = 1, xDeleted, xModified = 4, xExisting = 8 } RecordType; 要么 namespace RecordType …

2
为什么Clang优化x * 1.0而不优化x + 0.0?
为什么Clang会优化这段代码中的循环 #include <time.h> #include <stdio.h> static size_t const N = 1 << 27; static double arr[N] = { /* initialize to zero */ }; int main() { clock_t const start = clock(); for (int i = 0; i < N; ++i) { arr[i] *= 1.0; } printf("%u ms\n", (unsigned)(clock() - …

2
Lambda捕获和具有相同名称的参数-谁遮蔽了另一个?(c声与gcc)
auto foo = "You're using g++!"; auto compiler_detector = [foo](auto foo) { std::puts(foo); }; compiler_detector("You're using clang++!"); clang ++ 3.6.0及更高版本打印出“您正在使用clang ++!” 并警告捕获 foo未使用。 g ++ 4.9.0及更高版本打印出“您正在使用g ++!” 并警告未使用该参数 foo。 哪种编译器更准确地遵循C ++标准? 魔盒示例

25
做{…} while(false)
我正在查看某个人的一些代码,发现他的功能似乎具有某种模式: <return-type> function(<params>) { <initialization> do { <main code for function> } while(false); <tidy-up & return> } 这还不错,更奇特(实际代码相当简洁且毫不奇怪)。这不是我以前见过的东西,我想知道是否有人能想到它背后的任何逻辑-也许是另一种语言的背景?
125 c++ 

5
C ++中的私有虚拟方法
在C ++中将私有方法虚拟化的好处是什么? 我在一个开源C ++项目中注意到了这一点: class HTMLDocument : public Document, public CachedResourceClient { private: virtual bool childAllowed(Node*); virtual PassRefPtr<Element> createElement(const AtomicString& tagName, ExceptionCode&); };

6
移动赋值运算符和`if(this!=&rhs)`
在类的赋值运算符中,通常需要检查被赋值的对象是否是调用对象,因此您无需搞砸: Class& Class::operator=(const Class& rhs) { if (this != &rhs) { // do the assignment } return *this; } 移动分配运算符是否需要相同的东西?有没有一种情况this == &rhs是对的? ? Class::operator=(Class&& rhs) { ? }

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.