Questions tagged «c++»

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


8
我什么时候应该真正使用noexcept?
该noexcept关键字可以适当地应用于许多功能签名,但我不能确定何时我应该考虑在实践中使用它。根据我到目前为止所读的内容,最后一刻添加noexcept似乎解决了移动构造函数抛出时出现的一些重要问题。但是,对于一些实际的问题,我仍然无法提供满意的答案,这些问题使我不得不首先阅读更多内容noexcept。 我知道有很多函数永远不会抛出的示例,但是编译器无法自行确定。noexcept在所有这种情况下,我都应该在函数声明后附加吗? 必须考虑noexcept在每个函数声明之后是否都需要追加操作,这将大大降低程序员的工作效率(坦率地说,这将是一件痛苦的事情)。在哪些情况下我应该更小心使用它noexcept,在哪些情况下我可以摆脱隐含的含义noexcept(false)? 使用后,我什么时候才能实际观察到性能改善noexcept?特别是,给出一个示例代码,在添加之后C ++编译器能够为其生成更好的机器代码noexcept。 我个人很在乎,noexcept因为为编译器提供了增加的自由度,可以安全地应用某些优化。现代编译器是否noexcept以此方式利用?如果没有,我可以指望其中的一些在不久的将来这样做吗?

11
未命名/匿名名称空间与静态函数
C ++的一个功能是能够创建未命名(匿名)名称空间的功能,如下所示: namespace { int cannotAccessOutsideThisFile() { ... } } // namespace 您会认为这样的功能将毫无用处-因为您无法指定名称空间的名称,所以无法从外部访问名称空间中的任何内容。但是,这些未命名的名称空间可在创建它们的文件中访问,就好像您对它们具有隐式的使用子句一样。 我的问题是,为什么或何时比使用静态函数更好?还是它们本质上是两种完全相同的方法?
507 c++  namespaces 

5
模板中关键字“ typename”和“ class”的区别?
对于模板,我看到了两个声明: template < typename T > template < class T > 有什么不同? 在下面的示例中这些关键字的确切含义是什么(摘自关于模板的Wikipedia文章)? template < template < typename, typename > class Container, typename Type > class Example { Container< Type, std::allocator < Type > > baz; };
504 c++  templates  keyword 

23
哪个更快:堆栈分配或堆分配
这个问题听起来很基础,但这是我与另一位与我合作的开发人员进行的辩论。 我很小心地在可能的地方堆放东西,而不是堆放东西。他在跟我说话,看着我的肩膀,并评论说没有必要,因为他们是同样的表现。 我一直给人的印象是,增加堆栈的时间是恒定的,并且堆分配的性能取决于堆当前的分配(查找适当大小的孔)和取消分配(折叠孔以减少碎片)的复杂度,因为如果我没记错的话,许多标准库的实现在删除过程中都需要花费一些时间。 这让我感到震惊,因为它可能非常依赖于编译器。特别是对于这个项目,我正在使用Metrowerks编译器用于PPC体系结构。深入了解这种组合将是最有帮助的,但是总的来说,对于GCC和MSVC ++,情况是什么?堆分配的性能不如堆栈分配高吗?没有区别吗?还是差异如此之细,以至于没有意义的微优化。
503 c++  performance  memory  stack  heap 

5
C ++标准是否允许未初始化的bool使程序崩溃?
我知道C ++ 中的“未定义行为”几乎可以允许编译器执行其想要的任何操作。但是,由于我认为代码足够安全,因此发生了一次崩溃,这让我感到惊讶。 在这种情况下,真正的问题仅在使用特定编译器的特定平台上发生,并且仅在启用优化后才发生。 为了重现此问题并将其简化到最大程度,我尝试了几件事。下面是一个函数的提取物被称为Serialize,这将需要一个布尔参数,并复制字符串true或false到现有的目标缓冲区。 此功能是否在代码审查中,如果bool参数是未初始化的值,实际上没有办法告诉它崩溃吗? // Zero-filled global buffer of 16 characters char destBuffer[16]; void Serialize(bool boolValue) { // Determine which string to print based on boolValue const char* whichString = boolValue ? "true" : "false"; // Compute the length of the string we selected const size_t len = …

26
模板检查是否存在类成员函数?
是否可以编写一个模板来更改行为,具体取决于是否在类上定义了某个成员函数? 这是我要写的一个简单示例: template<class T> std::string optionalToString(T* obj) { if (FUNCTION_EXISTS(T->toString)) return obj->toString(); else return "toString not defined"; } 因此,如果class T已经toString()定义,则使用它;否则,事实并非如此。我不知道该怎么做的神奇部分是“ FUNCTION_EXISTS”部分。



8
无符号整数与size_t
我注意到,现代C和C ++代码似乎在所有地方都使用/ size_t而不是使用-从C字符串函数的参数到STL。我对此的原因及其带来的好处感到好奇。intunsigned int
492 c++  c  size-t 



9
为什么有头文件和.cpp文件?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 为什么C ++具有头文件和.cpp文件?
483 c++  header-files 

16
如何将std :: string转换为int?
只是一个简单的问题。我已经看了很多遍互联网,发现了一些解决方案,但是都没有用。看着将字符串转换为int并不意味着ASCII码。 为了快速调试,我们将方程式作为字符串传递。我们将其分解,正确设置格式并求解线性方程。现在,我无法将字符串转换为int。 我知道该字符串将采用(-5)或(25)等格式,因此绝对是整数。但是,我们如何从字符串中提取出来呢? 我想到的一种方法是在字符串中运行for / while循环,检查数字,然后提取所有数字,然后查看是否有前导“-”,如果有,则将int乘以- 1。 对于这么小的问题,似乎有些复杂。有任何想法吗?
483 c++  string  int 


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.