草庐IT

有的是

全部标签

c++ - "for each"是微软特有的吗?

VisualC++2010接受:std::vectorv;v.push_back(1);v.push_back(2);v.push_back(3);foreach(autoiinv)std::cout这是C++11特性还是Microsoft扩展?根据Wikipedia,C++11的for-each循环语法不同:intmyint[]={1,2,3,4,5};for(int&i:myint){std::cout 最佳答案 目前的标准草案不包括foreach(autoiinv)语法,只有for(autoi:myints),所以是的,它是只

programming-languages - 我想知道 &a 真正返回的是什么?

假设第一种情况inta;int*p=&a;itworksnoerror第二种情况longinta;longintb;b=&a;itwontwork我们大多数人都说b是一个变量而不是指针。但请看下面。所以问题是,如果&a返回的地址是一个无符号整数,那么为什么我们不能将它分配给一个普通变量呢?但是为什么只指向指针呢?见下文b=(unsignedint)&a;itworksaftertypecastingthoughitsnotpracticable.如果地址是整数格式那么为什么不保存无符号或长整数?我在想,这背后一定有不为人知的secret。谁能透露一下?我的想法是,指针一定在内部做某事,

c++ - 为什么这个 constexpr 代码会导致 GCC 吃掉我所有的 RAM?

以下程序将调用fun2^(MAXD+1)次。不过,最大递归深度永远不应超过MAXD(如果我的想法是正确的话)。因此编译可能需要一些时间,但它不应该占用我的RAM。#includeconstintMAXD=20;constexprintfun(intx,intdepth=0){returndepth==MAXD?x:fun(fun(x+1,depth+1)+1,depth+1);}intmain(){constexprinti=fun(1);std::cout问题是吃我的RAM正是它所做的。当我将MAXD调至30时,我的笔记本电脑在GCC4.7.2快速分配3GB左右后开始交换。我还没有尝

c++ - 为什么STL中List的迭代器使用的是(*node).data而不是node->data?

最近在看SGISTL的源码。我想知道我是否可以使用“->”运算符替换(*node).data来实现operator*(),如下所示:referenceoperator*()const{return(*node).data;}替换为:referenceoperator*()const{returnnode->data;}此外:node是一个指向结构对象的指针,如下所示:templatestruct__list_node{typedefvoid*void_pointer;void_pointerprev;void_pointernext;Tdata;}; 最佳答

c++ - lambda 是静态的是什么意思?

假设我有一个初始化并使用lambda的二进制搜索函数:boolcustom_binary_search(std::vectorconst&search_me){autocomp=[](intconsta,intconstb){returna没有指出这是完全多余的,只关注lambda;每次都声明和定义那个lambda对象是不是很昂贵?它应该是静态的吗?lambda是静态的意味着什么? 最佳答案 类型为的变量'comp'可以设为静态,几乎与任何其他局部变量一样,即它是相同的变量,指向相同的内存地址,每次运行此函数时).但是,请注意使用闭

c++ - 是不是所有的c库都可以在c++中使用?

这是一个相当新手的问题。 最佳答案 是的。没有理由不能在C++中使用C库。如果您想在C++编译器中编译C,情况就不同了。CABI得到C++的完全支持,但是从API的角度来看,事情并不一定如此整洁。某些C添加,例如restrict不在C++标准中,必须谨慎处理。 关于c++-是不是所有的c库都可以在c++中使用?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3571638/

c++ - 将 Qt 添加到现有的 Visual Studio c++ 项目

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭5年前。Improvethisquestion我有一个现有的VisualStudioC++项目。它使用GLUT创建一个主窗口,并且还使用glut作为右键单击上下文菜单。我现在要做的就是打开第二个窗口用作属性检查器来显示和更改一些值。每个人都推荐使用Qt进行GUI开发,但我找到的所有教程都讨论了在QtCreator中工作或如何从头开始创建Qt项目。几年前我曾使用Qt做过类似的事情,将它添加到我的项目中并不难。谁能解释一下,或者给我指点一个教程来解释如何

c++ - 我使用的是哪个版本的 C++?

目前我在Windows环境下使用C++。我正在使用带有Servicepack1的VisualStudio2008。除非我了解C++11,否则我从未想过C++版本。似乎有不同的版本,如ANSI标准、C++98标准等。我如何知道我使用的是哪个版本的C++?如果我没有VisualStudio,我知道我可以使用TC等其他编译器来编译我的C++代码。在这种情况下,我如何才能知道编译器使用的是哪个版本的C++。连续的C++版本中是否对编程概念进行了更改,还是仅在语言设计方面进行了更改? 最佳答案 它不像版本检查那么简单。每个支持某些C++11的

c++ - 为什么对于基于 RB 树的 C++ std::set 的插入时间基准,我得到的是常数而不是对数曲线?

我在HeapvsBinarySearchTree(BST)比较BST和Heap但是当我尝试对两者进行基准测试并比较结果时,我无法解释BST的数据。首先,我确认标准库确实使用了红黑树:WhatistheunderlyingdatastructureofaSTLsetinC++?然后我运行了这个基准测试。主要.cpp#include#include#include#includeintmain(intargc,char**argv){size_ti,n;std::setbst;std::random_devicedev;unsignedintseed=dev();std::mt19937p

c++ - 哪个编译器(如果有的话)在参数包扩展中有错误?

在尝试以方便的方式访问作为容器的元组时,我编写了一个测试程序。在clang(3.9.1和appleclang)上它按预期编译,产生预期的输出:1.1foo2在gcc(5.4,6.3)上,编译失败::Inlambdafunction::14:61:error:parameterpacksnotexpandedwith'...':+[](F&f,Tuple&tuple){f(std::get(tuple));}...^:14:61:note:'Is':Infunction'decltype(auto)notstd::make_callers_impl(std::index_sequence