Questions tagged «c++»

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


9
插入地图的首选/惯用方式是什么?
我确定了将元素插入的四种不同方式std::map: std::map<int, int> function; function[0] = 42; function.insert(std::map<int, int>::value_type(0, 42)); function.insert(std::pair<int, int>(0, 42)); function.insert(std::make_pair(0, 42)); 哪一种是首选/惯用方式?(还有我没想到的另一种方式吗?)
111 c++  stl  insert  stdmap  std-pair 


4
C ++模块-为什么将它们从C ++ 0x中删除?他们会稍后回来吗?
我刚刚发现了有关C ++ 0x中模块的旧C ++ 0x草案。 这个想法是通过只编写.cpp文件来摆脱当前的.h / .cpp系统,然后在编译过程中生成模块文件,然后再由其他.cpp文件使用。 这看起来像一个很棒的功能。 但是我的问题是:为什么他们从C ++ 0x中删除了它?是因为技术难题太多吗?时间不够?而且您认为他们会考虑针对C ++的新版本进行开发吗?

2
“……”标记的含义是什么?即参数包上的双省略号运算符
浏览gcc当前对新C ++ 11标头的实现时,我偶然发现了“ ......”标记。您可以[通过ideone.com] 检查以下代码是否可以正常编译。 template <typename T> struct X { /* ... */ }; template <typename T, typename ... U> struct X<T(U......)> // this line is the important one { /* ... */ }; 那么,该令牌的含义是什么? 编辑:看起来像这样将标题中的“ ......”修饰为“ ...”,我的意思是“ ......”。:)



11
了解术语和概念的含义-RAII(资源获取是初始化)
C ++开发人员能否请我们很好地描述RAII是什么,为什么它很重要以及它与其他语言是否有关联? 我确实知道一点。我相信它代表“资源获取就是初始化”。但是,这个名称与我对RAII的理解(可能是错误的)并不一致:我给人的印象是RAII是初始化堆栈上对象的一种方式,这样,当这些变量超出范围时,析构函数将自动被称为导致资源被清理。 那么为什么不称之为“使用堆栈触发清除”(UTSTTC :)?您如何从那里到达“ RAII”? 以及如何在堆栈上生成将清除堆中内容的内容?另外,在某些情况下您不能使用RAII?您是否曾经希望进行垃圾收集?至少您可以对某些对象使用垃圾收集器,而对其他对象进行管理? 谢谢。

3
MFC和ATL之间的根本区别是什么?
假设我仅将它们用于“常规” GUI程序(没有COM,没有ActiveX,没什么花哨的东西),那么我将在ATL和MFC之间看到什么根本的区别,以帮助我确定要使用哪一个? 我已经在网上进行了一些搜索,但最终没有一个答案真正回答了我的问题: http://msdn.microsoft.com/zh-CN/library/bk8ytxz5(v=vs.80).aspx: “ ATL是一种快速,简便的方法,既可以用C ++创建COM组件,又可以保持较小的占用空间。如果不需要MFC自动提供的所有内置功能,则可以使用ATL创建控件。” 并未真正回答我的问题,因为: 我不在使用COM。 这是否意味着MFC 是不是快吗?为什么/如何? “ MFC允许您创建完整的应用程序,ActiveX控件和活动文档。如果您已经使用MFC创建了控件,则可能要继续在MFC中进行开发。创建新控件时,如果不需要,请考虑使用ATL。 MFC的所有内置功能。” 也没有回答我的问题,因为: 我什至不知道ActiveX 首先是什么。 微软似乎不鼓励使用MFC,但我不知道为什么。 ATL没有提供MFC的“内置功能” 到底是什么? 总的来说,这不能回答我的问题,因为它不能解释不利因素及其背后的原因。 因为直接或间接,所有内容似乎都链接回到上一页: 如何确定对新的C ++项目使用ATL,MFC,Win32还是CLR? “在ATL和MFC之间进行选择比较棘手。 [[不开玩笑!]] 我将带您转到MSDN的页面进行选择,以便在它们之间进行选择。” 显然,这不能回答我的问题。:) http://www.codeguru.com/forum/archive/index.php/t-64778.html 等等 我目前观察到的(在最近几天内,试图同时学习两者): ATL基于模板或编译时多态性。 ATL方法往往是非虚拟的,并且倾向于返回引用。 MFC基于虚拟方法或运行时多态性。 MFC方法往往是虚拟的,并且倾向于返回指针。 但它们之间似乎在架构上没有任何区别: 两者都使用消息映射(BEGIN_MSG_MAP与BEGIN_MESSAGE_MAP...大不相同) 两者都将Win32方法包装到类中 两者似乎都有相似的类别CWnd。CWindow 但是然后,如果除了编译时和运行时方面没有真正的区别,那么为什么两者都存在?其中之一不够吗? 我在这里想念什么?
110 c++  visual-c++  mfc  atl 

8
Malloc与新版-不同的填充
我正在审查使用MPI进行高性能计算(10 ^ 5-10 ^ 6内核)的项目的其他人的C ++代码。该代码旨在允许(可能)不同体系结构上的不同机器之间进行通信。他写了一条评论,内容大致如下: 我们通常使用new和delete,但是在这里我使用malloc和free。这是必要的,因为某些编译器在new使用时会以不同的方式填充数据,从而导致在不同平台之间传输数据时出错。不会发生这种情况malloc。 这与我从标准newvs malloc问题中了解到的任何内容都不符。 new / delete和malloc / free有什么区别?这暗示了编译器可以对对象的大小进行不同的计算(但是,为什么这与使用sizeof?有所不同)。 malloc和placement new vs. new是一个相当受欢迎的问题,但仅涉及new在malloc不使用构造函数的情况下的使用,与此无关。 malloc如何理解对齐方式?说,保证内存可以正确地与任一new或malloc这是我以前认为的。 我的猜测是,他在过去的某个时候误诊了自己的错误,并推断出该错误new并malloc进行了不同程度的填充,我认为这可能是不正确的。但我找不到Google或其他任何问题的答案。 帮我,StackOverflow,您是我唯一的希望!

30
在C / C ++中,最简单的方法来反转字节中的位顺序?
尽管有多种方法可以反转字节中的位顺序,但我对开发人员实现“最简单”的方法感到好奇。通过反转,我的意思是: 1110 -> 0111 0010 -> 0100 这类似于但不重复此 PHP问题。 这类似于但不是此 C问题的重复项。这个问题要求开发人员最简单的方法来实施。“最佳算法”与内存和CPU性能有关。
110 c++  c  bit-manipulation 


11
如何使用GCC和ld删除未使用的C / C ++符号?
我需要严格优化可执行文件的大小(ARM开发),并且我注意到在我当前的构建方案(gcc+ ld)中,未使用的符号没有被剥离。 arm-strip --strip-unneeded所产生的可执行文件/库的用法不会更改可执行文件的输出大小(我不知道为什么,也许根本无法更改)。 修改我的构建管道的方式(如果存在)是什么,以便从生成的文件中删除未使用的符号? 我什至不会想到这一点,但是我当前的嵌入式环境不是非常“强大”,并且甚至节省500K了2M结果,从而极大地提高了加载性能。 更新: 不幸的是,目前的gcc版本我使用不具备-dead-strip选项和-ffunction-sections... + --gc-sections用于ld没有给出结果输出任何显著差异。 我感到震惊的是,这甚至成为了问题,因为我确定gcc + ld应该自动剥离未使用的符号(为什么还要保留它们?)。
110 c++  c  gcc  ld  strip 

5
std :: next_permutation实现说明
我很好奇如何std:next_permutation实现,所以我提取了gnu libstdc++ 4.7版本并清理了标识符和格式以产生以下演示... #include <vector> #include <iostream> #include <algorithm> using namespace std; template<typename It> bool next_permutation(It begin, It end) { if (begin == end) return false; It i = begin; ++i; if (i == end) return false; i = end; --i; while (true) { It j = i; --i; if …

15
使用标准命名空间
关于std名称空间使用“ using”似乎有不同的看法。 有些人说使用' using namespace std,其他std::人说不使用,而是给将与' ' 一起使用的std函数添加前缀,而其他人则说使用类似以下内容: using std::string; using std::cout; using std::cin; using std::endl; using std::vector; 对于所有要使用的std函数。 各自的优缺点是什么?
110 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.