Questions tagged «c++»

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

3
如何从GCC / c装配件输出中消除“噪音”?
我想检查boost::variant在我的代码中应用的程序集输出,以查看优化了哪些中间调用。 当我编译以下示例(使用的GCC 5.3 g++ -O3 -std=c++14 -S)时,似乎编译器优化了所有内容并直接返回100: (...) main: .LFB9320: .cfi_startproc movl $100, %eax ret .cfi_endproc (...) #include <boost/variant.hpp> struct Foo { int get() { return 100; } }; struct Bar { int get() { return 999; } }; using Variant = boost::variant<Foo, Bar>; int run(Variant v) { return boost::apply_visitor([](auto& …
76 c++  gcc  assembly  clang 

7
Visual Studio代码includePath
我正在尝试在Visual Studio Code中构建C / C ++。我安装了C / C ++和所有相关扩展。 #include <stdio.h> int main() { printf("Test C now\n"); return 0; } 但是在#include <stdio.h>“添加包含设置的路径”下方有一条绿线。当我单击它时,它将移至“ c_cpp_properties.json”。 如何在以下配置中以及在何处添加包含路径? "configurations": [ { "name": "Mac", "includePath": ["/usr/include"] } ]

23
为什么不对C ++中的所有内容使用指针?
假设我定义了一些类: class Pixel { public: Pixel(){ x=0; y=0;}; int x; int y; } 然后使用它编写一些代码。为什么要执行以下操作? Pixel p; p.x = 2; p.y = 5; 来自Java世界,我总是写: Pixel* p = new Pixel(); p->x = 2; p->y = 5; 他们基本上做同样的事情,对不对?一个在堆栈上,另一个在堆栈上,因此以后我必须将其删除。两者之间有根本区别吗?为什么我要优先选择另一个?
75 c++  pointers  stack  heap 

2
与零比较时的int运算符!=和==
我发现!=和==并不是测试零或非零的最快方法。 bool nonZero1 = integer != 0; xor eax, eax test ecx, ecx setne al bool nonZero2 = integer < 0 || integer > 0; test ecx, ecx setne al bool zero1 = integer == 0; xor eax, eax test ecx, ecx sete al bool zero2 = !(integer < 0 …

5
Lambda的返回类型可以通过返回值来推断,那么为什么函数不能呢?
#include <iostream> int main(){ auto lambda = [] { return 7; }; std::cout << lambda() << '\n'; } 该程序编译并打印7。lambda 的返回类型根据返回值7推导为整数类型。 为什么普通功能无法做到这一点? #include <iostream> auto function(){ return 42; } int main(){ std::cout << function() << '\n'; } 错误:“函数”函数使用“自动”类型说明符,而没有尾随返回类型
75 c++  function  c++11  lambda  auto 

9
适用于本机Visual Studio开发人员的有用加载项或插件
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 6年前关闭。 改善这个问题 Visual Studio有很多不同的加载项,请参见Visual Studio Gallery 。请分享您的经验和收藏。 作为动力,以下是一些我的最爱: 版本控制版本[F / O]-非常方便的扩展,用于自动版本编号 SlickEdit Gadgets [F]-有用的编辑器小工具,内置文件浏览器... SlickEdit Tools [C]-编辑和版本控制工具 重构!for C ++ [F / C]-C ++代码重构,例如C# WiX [F / O]-使用XML进行Windows安装程序设置 AnkhSVN [F / O]-从IDE内部使用Subversion 可视泄漏检测器[F / O]-调试问题的帮助程序 Parasoft C ++ test [C]-代码质量保证套件 Parasoft Insure ++ [C]-运行时内存分析 RockScroll [F]-滚动长文件的助手 Axialis …

3
在vector <double>上使用std :: max_element
我正在尝试使用std::min_element和std::max_element返回double的向量中的min和max元素。我的编译器不喜欢我当前尝试使用它们的方式,并且我不理解错误消息。我当然可以编写自己的过程来找到最小/最大,但是我想了解如何使用这些函数。 #include &lt;vector&gt; #include &lt;algorithm&gt; using namespace std; int main(int argc, char** argv) { double cLower, cUpper; vector&lt;double&gt; C; // code to insert values in C not shown here cLower = min_element(C.begin(), C.end()); cUpper = max_element(C.begin(), C.end()); return 0; } 这是编译器错误: ../MIXD.cpp:84: error: cannot convert '__gnu_cxx::__normal_iterator&lt;double*, std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt;' …
75 c++  vector  max  min 


7
uint8_t,uint_fast8_t和uint_least8_t之间的区别
C99标准引入了以下数据类型。可以在此处找到有关AVR stdint库的文档。 uint8_t 表示它是8位无符号类型。 uint_fast8_t 表示它是最快的无符号整数,至少8位。 uint_least8_t 表示它是一个至少8位的无符号整数。 我了解uint8_t什么是uint_fast8_t(我不知道它如何在寄存器级别实现)。 1.您能解释一下“它unsigned int至少有8位”的含义吗? 2.uint_fast8_t与uint_least8_t相比如何以及uint8_t如何帮助提高效率/代码空间?
75 c++  c  integer  avr  c99 

12
RAII与垃圾收集器
我最近在CppCon 2016上观看了Herb Sutter关于“ Leak Free C ++ ...”的精彩演讲,他在演讲中谈到了使用智能指针实现RAII(资源获取是初始化)-概念以及它们如何解决大多数内存泄漏问题。 现在我在想。如果我严格遵守RAII规则,这似乎是一件好事,那为什么与C ++中的垃圾收集器有什么不同呢?我知道,使用RAII,程序员可以完全控制何时再次释放资源,但是在任何情况下,仅使用垃圾收集器都是有好处的吗?效率会降低吗?我什至听说有一个垃圾收集器可以提高效率,因为它可以一次释放更大的内存块,而不是在整个代码中释放小的内存块。


17
Visual Studio:链接:致命错误LNK1181:无法打开输入文件
我已经在Visual Studio 2010中遇到了一个奇怪的错误,已有一段时间了。 我有一个解决方案,其中包含一个可编译为静态库的项目,以及另一个非常简单但依赖于此库的项目。 有时,在最近的几天里,重建解决方案或仅使用1-3个更改的源文件编译该解决方案后,出现以下错误: 2&gt;LINK : fatal error LNK1181: cannot open input file 'thelibrary.lib' ========== Rebuild All: 1 succeeded, 1 failed, 0 skipped ========== 编译thelibrary.lib成功,没有任何错误或警告的地方。 我曾尝试清洁溶液,但这并不总是有效。 怎么了


9
C ++名称空间建议
我只是自学C ++命名空间(来自C#背景),并且我真的开始认为,即使C ++比所有其他语言都有更好的功能,嵌套命名空间也不是其中之一! 我是否正确认为,为了声明一些嵌套的名称空间,我必须执行以下操作: namespace tier1 { namespace tier2 { namespace tier3 { /* then start your normal code nesting */ } } } 相对于: namespace tier1::tier2::tier3 { } C#? 当我需要转发声明时,这会变得更加疯狂: namespace tier1 { namespace tier2 { namespace forward_declared_namespace { myType myVar; // forward declare } namespace tier3 { /* …
75 c++  namespaces 


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.