Questions tagged «c++»

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

7
为什么使用三元运算符在宏中定义1和0?
我正在将SDK用于嵌入式项目。在此源代码中,我找到了一些至少是我特有的代码。SDK的许多地方都有这种格式的源代码: #define ATCI_IS_LOWER( alpha_char ) ( ( (alpha_char >= ATCI_char_a) && (alpha_char <= ATCI_char_z) ) ? 1 : 0 ) #define ATCI_IS_UPPER( alpha_char ) ( ( (alpha_char >= ATCI_CHAR_A) && (alpha_char <= ATCI_CHAR_Z) ) ? 1 : 0 ) 在这里使用三元运算符有什么区别吗? 是不是 #define FOO (1 > 0) 与...相同 #define BAR ( …

9
为什么模数除法(%)仅适用于整数?
我最近遇到了一个问题,可以使用模数除法轻松解决,但是输入是浮点数: 给定一个周期性函数(例如sin)和只能在周期范围内计算它的计算机功能(例如[-π,π]),则使一个函数可以处理任何输入。 “显而易见的”解决方案是这样的: #include <cmath> float sin(float x){ return limited_sin((x + M_PI) % (2 *M_PI) - M_PI); } 为什么不起作用?我收到此错误: error: invalid operands of types double and double to binary operator % 有趣的是,它确实适用于Python: def sin(x): return limited_sin((x + math.pi) % (2 * math.pi) - math.pi)
79 c++  c 

2
streambuf到底是什么?如何使用?
我试图学习更多有关I / O流在C ++中的工作方式的信息,我对何时使用什么感到困惑。 到底是什么streambuf?与a ,an或a相比, 我什么时候使用a ?(我已经知道最后三个了,但如果能做到的话,还不知道如何与之比较。)streambufstringistreamvectorstreambuf
78 c++  iostream 

3
“ class:”在C ++中是什么意思?
我从没看过 我以为这是“ :: sample”的错字,但是当我看到它确实可以编译时,我感到非常困惑。谁能帮我找出来吗?我不认为这是一个goto标签。 void f() { class: sample { // there were some members declared here } x; }
78 c++  class  colon 

11
为什么Visual C ++缺乏重构功能?
在Visual Studio 2008中使用C ++进行编程时,为什么没有使用C#时在重构菜单中看到的功能? 我经常使用“重命名”,当它不存在时,您真的会错过它。我确定您可以获得提供此功能的插件,但是为什么在使用C ++时却不将其集成到IDE中呢?这是由于必须解析C ++的方式引起的麻烦吗?


4
是否定义了减去两个NULL指针的行为?
如果两个非空指针变量都被赋值,是否定义了两个非空指针变量(根据C99和/或C ++ 98)的区别NULL? 例如,假设我有一个看起来像这样的缓冲区结构: struct buf { char *buf; char *pwrite; char *pread; } ex; 说,ex.buf指向数组或某些已分配的内存。如果我的代码始终确保pwrite并pread指向该数组或指向该数组的一个数组,那么我很有信心ex.pwrite - ex.pread将始终对其进行定义。但是,如果pwrite和pread都为NULL。我是否可以期望将两者定义相减,(ptrdiff_t)0还是严格遵从的代码需要测试指针是否为NULL?请注意,我唯一感兴趣的情况是两个指针均为NULL(表示缓冲区未初始化的情况)。在满足上述假设的前提下,原因与完全兼容的“可用”功能有关: size_t buf_avail(const struct s_buf *b) { return b->pwrite - b->pread; }
78 c++  c  c99  c89 


4
如何禁用特定包含文件的警告?
我希望禁用对特定包含文件直接或间接包含的所有文件的特定警告。例如,对于所有文件或a包含的文件包含的文件,我想禁用警告“您正在为char *分配字符串文字” #include <bar/*>(在我的情况下,星号表示“这里可能有任何东西”)。 原因是,我必须与之进行编程的某些人无法使用“ const”,因此最后,我收到有关该特定字符串文字滥用的许多警告。我想忽略来自其代码的成千上万的警告,因此我可以专注于自己的代码中的错误并加以解决。 我使用Intel C ++和GCC。我的一些伙伴使用clang,所以我也很高兴听到解决方案。

7
从STL容器继承实现而不是委托可以吗?
我有一个适用于std :: vector的模型,用于对特定于域的对象的容器进行建模。我想向用户公开大多数std :: vector API,以便他们可以在容器上使用熟悉的方法(大小,清除,在等)和标准算法。在我的设计中,这似乎是我反复出现的模式: class MyContainer : public std::vector<MyObject> { public: // Redeclare all container traits: value_type, iterator, etc... // Domain-specific constructors // (more useful to the user than std::vector ones...) // Add a few domain-specific helper methods... // Perhaps modify or hide a few methods (domain-related) }; …
78 c++  stl 

10
始终使用智能指针是一种好习惯吗?
我发现智能指针比原始指针舒服得多。因此,始终使用智能指针是一个好主意吗?(请注意,我来自Java背景,因此与显式内存管理的概念不太相似。因此,除非智能指针存在一些严重的性能问题,否则我将坚持使用它们。) 注意:尽管我来自Java背景,但我对智能指针的实现和RAII的概念非常了解。因此,发布答案时,您可以从我这方面将这些知识视为理所当然。我几乎在所有地方都使用静态分配,并且仅在必要时使用指针。我的问题仅仅是:我可以一直使用智能指针代替原始指针吗?
78 c++ 

4
与模板类的朋友一起创建类模板,这里到底发生了什么?
假设我正在为二叉树创建一个类BT,并且有一个描述该树的元素的类BE,例如 template<class T> class BE { T *data; BE *l, *r; public: ... template<class U> friend class BT; }; template<class T> class BT { BE<T> *root; public: ... private: ... }; 这似乎可行;但是我对下面发生的事情有疑问。 我最初试图将朋友声明为 template<class T> friend class BT; 但是,似乎有必要在此处使用U(或以外的其他方法T),这是为什么呢?这是否意味着任何人BT都是任何特定BE班级的朋友? 在IBM页面上的模板和朋友页面上,有函数类型的朋友关系类型的示例,但类却没有(并猜测语法尚未在解决方案上收敛)。我更想了解如何针对我希望定义的朋友关系类型正确获取规范。
78 c++  class  templates 

13
在开发过程中如何检测代码重复?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 5年前关闭。 改善这个问题 我们有一个相当大的代码库,C ++的LOC为400K,并且代码重复是一个问题。是否有任何工具可以有效地检测重复的代码块? 理想情况下,开发人员可以在开发过程中使用它,而不仅仅是偶尔运行以查看问题所在。如果我们可以将这样的工具与CruiseControl集成在一起,在每次签入后提供报告,那也很好。 我前段时间看过Duploc,它显示了一个漂亮的图形,但是需要一个Smalltalk环境才能使用它,这使得自动运行非常困难。 免费工具会很好,但是如果有一些好的商业工具,我也会感兴趣。


7
对C ++编译过程进行性能分析
我倾向于编写相当大的仅模板头的C ++库模板,而我的用户通常抱怨编译时间。在考虑了这个问题之后,我想到我不知道时间在哪里。是否有一些简单的方法可以用通用编译器(例如g ++,icc和xlC)来分析C ++编译过程?例如,是否有可能了解在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.