Questions tagged «c++»

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

2
安全布尔习语在C ++ 11中过时了吗?
@R的答案。Martinho Fernandes表明,C ++ 11中不赞成使用安全布尔习语,因为可以用一个简单的方法代替它 explicit operator bool() const; 根据答案中的标准报价§4 [conv] p3: T当且仅当声明T t=e;的格式正确(对于某些发明的临时变量t(第8.5节))时,表达式e才能隐式转换为类型。某些语言构造要求将表达式转换为布尔值。表达式e出现在这样的背景下被说成是上下文转换到bool和良好成形的当且仅当该声明bool t(e);是良好的形成,对于某些发明临时变量t(第8.5节)。 高亮部分清楚地将“隐式显式强制转换”(在标准中称为“上下文转换”)显示为@R。马丁尼奥说。 要求“隐式显式强制转换”的“某些语言构造”如下所示: if,while,for(§6.4 [stmt.select] p4) 二进制逻辑运算符&&和||(§5.14 [expr.log.and/or] p1两者) 逻辑否定运算符!(§5.3.1 [expr.unary.op] p9) 条件运算符?:(§5.14 [expr.cond] p1) static_assert(§7 [dcl.dcl] p4) noexcept(§15.4 [except.spec] p2) 我们标题中的假设正确吗?我希望我们不要忽视任何潜在的缺点。

9
C ++中的内部typedef-好样式还是坏样式?
我最近发现自己经常做的事情是声明与该类中特定类相关的typedef,即 class Lorem { typedef boost::shared_ptr<Lorem> ptr; typedef std::vector<Lorem::ptr> vector; // // ... // }; 这些类型然后在代码的其他地方使用: Lorem::vector lorems; Lorem::ptr lorem( new Lorem() ); lorems.push_back( lorem ); 我喜欢它的原因: 它减少了由类模板引入的噪音,std::vector<Lorem>变为Lorem::vector等。 它用作意图的声明-在上面的示例中,Lorem类旨在通过boost::shared_ptr向量进行引用计数并存储在向量中。 它允许更改实现-即,如果需要更改Lorem以便boost::intrusive_ptr在以后的阶段(通过)对引用计数进行计数,那么这将对代码产生最小的影响。 我认为它看起来“更漂亮”并且可以说更易于阅读。 我不喜欢的原因: 依赖有时会出现问题-例如,如果您想将a嵌入Lorem::vector到另一个类中,但只需要(或想要)转发声明的Lorem(而不是在其头文件中引入依赖),则最终必须使用显式类型(例如boost::shared_ptr<Lorem>而不是Lorem::ptr),这有点不一致。 这可能不是很常见,因此很难理解吗? 我尝试以我的编码风格为目标,因此对它有其他意见是很好的,这样我可以对自己的想法进行一些剖析。

6
OpenCV C ++ / Obj-C:检测一张纸/正方形检测
我在测试应用程序中成功实现了OpenCV平方检测示例,但现在需要过滤输出,因为它很乱-还是我的代码错误? 我感兴趣的纸歪斜减少(如的四个角点是),并进一步处理... 输入输出: 原始图片: 点击 码: double angle( cv::Point pt1, cv::Point pt2, cv::Point pt0 ) { double dx1 = pt1.x - pt0.x; double dy1 = pt1.y - pt0.y; double dx2 = pt2.x - pt0.x; double dy2 = pt2.y - pt0.y; return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10); …



30
为什么省略花括号被认为是不好的做法?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心寻求指导。 8年前关闭。 为什么每个人都告诉我编写这样的代码是一种不好的做法? if (foo) Bar(); //or for(int i = 0 i < count; i++) Bar(i); 关于省略花括号的最大论据是,有时花括号可能是花括号的两倍。例如,以下代码为C#中的标签绘制发光效果。 using (Brush br = new SolidBrush(Color.FromArgb(15, GlowColor))) { for (int x = 0; x <= GlowAmount; x++) { for (int y = 0; y <= GlowAmount; y++) { g.DrawString(Text, this.Font, br, new Point(IconOffset …
177 java  c#  c++  c  coding-style 

3
如何在迭代时从地图中删除?
如何在迭代时从地图中删除?喜欢: std::map<K, V> map; for(auto i : map) if(needs_removing(i)) // remove it from the map 如果我使用map.erase它将使迭代器无效
177 c++  map  c++11 

1
Mutex示例/教程?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使它成为Stack Overflow 的主题。 4个月前关闭。 改善这个问题 我是多线程的新手,并试图了解互斥锁的工作原理。做了很多谷歌搜索,我发现了一个不错的教程,但是它仍然对它的工作方式产生了一些疑问,因为我创建了自己的程序,其中锁不起作用。 互斥锁的一种绝对不直观的语法pthread_mutex_lock( &mutex1 );是,当我真正想要锁定的是其他变量时,它看起来像互斥锁已被锁定。这种语法是否意味着锁定互斥锁会锁定代码区域,直到互斥锁解锁为止?那么线程如何知道该区域已锁定?[ 更新:线程知道该区域已被 Memory Fencing 锁定 ]。难道这种现象不应该称为临界区吗?[ 更新:关键部分对象仅在Windows中可用,其中这些对象比互斥对象快,并且仅对实现该对象的线程可见。否则,关键部分仅指由互斥锁保护的代码区域 ] 简而言之,能否请您提供最简单的互斥体示例程序以及有关其工作原理的最简单的解释?我确信这将对其他许多新手有所帮助。

1
您遇到过的最糟糕的现实世界宏/预处理器滥用情况是什么?
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它当前不接受新的答案或互动。 您遇到过的最糟糕的 现实世界宏/预处理器滥用情况(请不要有任何人为的IOCCC答案* haha​​ *)? 如果确实很有趣,请添加一个简短的摘要或故事。目的是教一些东西,而不是总是告诉人们“从不使用宏”。 ps:我以前使用过宏...但是通常,当我有一个“真实的”解决方案时,我最终会摆脱它们(即使真正的解决方案是内联的,因此它变得类似于宏)。 奖励:举一个例子,其中宏确实比非宏解决方案好。 相关问题: C ++宏什么时候有益?
176 c++  c  macros  preprocessor 

17
超出范围访问数组不会出错,为什么?
我在C ++程序中分配值,如下所示: #include <iostream> using namespace std; int main() { int array[2]; array[0] = 1; array[1] = 2; array[3] = 3; array[4] = 4; cout << array[3] << endl; cout << array[4] << endl; return 0; } 程序将打印3和4。这应该是不可能的。我正在使用g ++ 4.3.3 这是编译并运行命令 $ g++ -W -Wall errorRange.cpp -o errorRange $ ./errorRange …
176 c++  arrays 

1
C ++中的静态构造函数?我需要初始化私有静态对象
我想要一个带有私有静态数据成员(包含所有字符az的向量)的类。在Java或C#中,我可以创建一个“静态构造函数”,该构造函数将在创建该类的任何实例之前运行,并设置该类的静态数据成员。它只运行一次(因为变量是只读的,只需要设置一次),并且由于它是类的函数,因此可以访问其私有成员。我可以在构造函数中添加代码,以检查向量是否已初始化,如果尚未初始化,则将其初始化,但这会引入许多必要的检查,而且似乎不是解决问题的最佳方法。 我想到,由于变量将是只读的,因此它们只能是公共静态const,因此我可以在类外设置它们一次,但是再一次,这看起来像是一个丑陋的hack。 如果我不想在实例构造函数中初始化私有静态数据成员,是否可以在类中拥有私有静态数据成员?



30
C ++宏什么时候有益?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 改善这个问题 该ç预处理器有理由担心和C ++社区避之唯恐不及。内联函数,const和模板通常是的更安全和优越的替代方法#define。 以下宏: #define SUCCEEDED(hr) ((HRESULT)(hr) >= 0) 绝不优于安全类型: inline bool succeeded(int hr) { return hr >= 0; } 但是宏确实有其位置,请列出您在没有预处理器的情况下无法发现的宏用途。 请把每个用例放在一个单独的答案中,以便可以将其投票。如果您知道如何在没有预告的情况下获得答案之一,请指出该答案的注释方式。


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.