草庐IT

c++ - template-parameter-list of template parameter 是什么意思

引用3.3.9/1中的一句话:Thedeclarativeregionofthenameofatemplateparameterofatemplatetemplate-parameteristhesmallesttemplate-parameter-listinwhichthenamewasintroduced.你能举个例子来理解上面的定义吗?我也想知道模板参数的模板参数列表是什么意思?示例会有所帮助。 最佳答案 template//thedeclarativeregionendshereclassq//hencethenamema

c++ - std::initializer_list<int>({1,2,3}) 和 {1,2,3} 有什么区别?

我有以下模板函数:templatevoidfoo2(Tt){}我知道我不能使用以下方式调用它:foo2({1,2,3});因为初始化列表是模板参数的非推导上下文。我必须使用:foo2>({1,2,3});但我也可以使用:foo2(std::initializer_list({1,2,3}));这让我想知道之间有什么区别:{1,2,3}和std::initializer_list({1,2,3})? 最佳答案 Abraced-initlist不是表达式,因此没有类型。当你打电话时foo2({1,2,3});编译器不知道是什么类型{1,

c++ - 模板内的编辑列表不保存

我有一个for循环,我想在不复制和粘贴代码的情况下多次使用它,所以我使用的是模板。AnswerIusedforthetemplate.模板和循环本身按预期工作,但在for循环内调用的函数内更改列表中的变量不起作用。如果我在“测试”函数内更改s.Color,它在该函数或示例循环之外没有更改。那么为什么它不在循环外改变呢?我怎样才能确保它在循环之外发生变化?模板:voidTest(TrafficLights){switch(s.Type){casehfdWeg:s.Color=queueCurrent.HoofdwegColor;break;casezWeg:s.Color=queueCu

c++ - std::list of objects 效率

假设您有某个类的std::list。您可以通过两种方式制作此列表:1)std::listmyClassList;MyClassmyClass;myClassList.push_front(myClass);使用此方法,当您将对象传递给列表时,复制构造函数将被调用。如果该类有很多成员变量,并且您多次进行此调用,它的成本可能会很高。2)std::listmyClassList;MyClass*myClass=newMyClass();myClassList.push_front(myClass);这个方法不会调用类的复制构造函数。我不太确定在这种情况下会发生什么,但我认为该列表将创建一个新

c++ - 使用多维 std::initializer_list

我有一个关于在C++中使用多维std::intializer_list的问题。我有一个Matrix类,我希望能够像这样初始化它:Matrixm({{1,2,3},{4,5,6},{7,8,9}});我现在拥有的构造函数采用二维初始化列表作为参数,但编译器不喜欢我的使用方式。这是代码:templateMatrix::Matrix(std::initializer_list>set){std::vector>setVec=set;std::vector>v;for(std::vector>::iteratori=setVec.begin();i!=setVec.end();i++){v.p

c++ - "the procedure entry point _ZNSt8_detail15_List_node_base7_M_hookEPS0_ could not be located in the dynamic link library libstdc -6.dll."

有个小问题。我有C++代码,它链接到一些库。我以前有源代码的(原始)exe,它在第一台机器上运行完美。还有第二台机器,我在那里处理源代码,更改它,等等。在第二台机器上,该源代码的构建工作正常,当我复制second.exe并尝试在第一台机器上运行它时萌芽它显示错误信息"theprocedureentrypoint_ZNSt8_detail15_List_node_base7_M_hookEPS0_couldnotbelocatedinthedynamiclinklibrarylibstdc++-6.dll."有一件事,second.exe被复制到与original.exe相同的文件夹中,

c++ - std::list::splice, list&& VS list&

std::list的一些方法,可能还有其他STL容器,在C++11中添加了一个新的重载。我需要的是list::splice()。一种方法采用列表&参数,另一种方法采用列表&&参数。我想知道有什么区别,我应该更喜欢哪个。我查看了libstdc++(GCC编译器使用的标准C++库)的实现,它在两种情况下都在内部使用了list&&版本。C++11规范也没有说明这个问题。它只提供了2种方法,没有解释区别。您不move列表本身,也不move节点(复制它们的指针似乎是将节点从一个列表move到另一个列表的方法),那么这有什么关系呢?我只有一个想法,也许使用list&&就像是对编译器的promise

c++ - 将 STL 容器<T *> 转换为容器<T const *>

我正在寻找一种方法来制定具有以下内容的类:使用具有最大“常量”的指针的STL容器的接口(interface)但是它在内部改变了指向的对象与非常量模拟相比没有额外的运行时开销理想情况下,与非const版本相比,该解决方案将编译成没有额外的代码,因为const/非const-ness在这里只是对程序员的一种帮助。这是我到目前为止尝试过的:#include#includeusingnamespacestd;typedefintT;classC{public://Elementspointedtoaremutable,listisnot,'this'isnot-compilesOKlistco

c++ - std::list 中每个元素的大小是多少?

std::list在其实现中使用链表,列表中的每个元素有多大(减去有效负载)?通过测试,在Windows7机器上使用mingw(不是mingw-64),每个元素对于一个int的每个元素占用24个字节。虽然一个指向左边的指针和一个指向右边的指针只有4+4=8个字节!一个int只有4个字节(由sizeof(void*)和sizeof(int)决定),所以我很好奇,额外的空间去哪儿了?(测试涉及制作许多元素,查看程序的大小,制作更多元素并再次查看程序的大小,取差) 最佳答案 当遇到有关STL容器的内存问题时...请记住,它们获得的所有内存

c++ - 为什么必须包含 <initializer_list> 才能使用 auto?

已经有类似的question关于SO,但我想强调braced-init-lists的另一个方面。请考虑以下事项:autox={1};//(1)除非标题,否则这是错误格式(8.5.4/2)已经包括了。但为什么?标准说,模板std::initializer_list不是预定义的。这是否意味着声明(1)引入了一种新类型?在所有其他情况下,auto可以使用如autoy=expr;哪里expr是一个表达式,自动推导的类型已经存在。另一方面,从逻辑的角度来看,编译器必须为结构{1}分配一个隐式类型。,为此std::initializer_list是另一个名字。但是在声明(1)中我们不想命名这个类型