草庐IT

Initializer-list

全部标签

c++ - 谷歌模拟 : Return() a list of values

通过GoogleMock的Return(),您可以返回调用模拟函数后将返回的值。但是,如果期望某个函数被调用多次,并且每次都希望它返回不同的预定义值。例如:EXPECT_CALL(mocked_object,aCertainFunction(_,_)).Times(200);如何让aCertainFunction每次都返回一个递增的整数? 最佳答案 使用sequences:using::testing::Sequence;Sequences1;for(inti=1;i 关于c++-谷歌模

c++ - 在复制赋值运算符中分配基类成员

我有一个继承自MSFT类的类,因此无法更改,我希望派生类的复制构造函数和复制赋值运算符具有相同的行为。我遇到的问题是,在复制构造函数中,您可以自由地为初始化列表中的基类调用构造函数,但在运算符中,这不是一个选项。如何在赋值运算符中正确地重新创建此行为?仅在运算符重载的主体中调用基类的构造函数就足够了吗?附加说明:基类继承自CObject,它具有operator=()和复制构造函数作为私有(private)和未实现的方法,因此不幸的是,对这些方法的任何调用都会导致编译错误。我在下面提供了一个简化的代码场景:类声明:classBase{protected:intbaseInt;public

c++ - 当我的编译器不符合标准时如何将数组成员归零

我的编译器(C++Builder6)在语法上允许数组成员初始化(至少为零),但实际上它并没有真正做到这一点。因此,根据上下文,下面给出的示例中的断言会失败。#includestructTT{charb[8];TT():b(){}};voidtestIt(){TTt;assert(t.b[7]==0);}目前不能更改编译器。我的问题是:就future的可移植性和标准一致性而言,“修复”此缺陷的最佳方法是什么?编辑:事实证明,我的第一个示例太短了。它错过了重点,数组的填充级别非常重要,它必须存储在非常靠近数组的地方,即:在同一个类中。即使原始问题仍然存在,我的实际问题模式通常是这样的:st

c++ - initializer_list 结合其他参数

假设我有一个类,它在构造函数中采用T类型的参数和U类型的参数集合。以下解决方案有效:structQ{Q(Tt,std::initializer_listus);};创建此类的实例将是:Qq{t1,{u1,u2,u3,u4}};但这对我来说看起来有点不干净。有比这个更好的解决方案吗? 最佳答案 您需要的是可变参数模板(c++11特性)。#includestructT{};structU{};classQ{public:templateQ(Tt,ArgTypes...args):Q(t,{args...}){}private:Q(Tt,

c++ - list 和 forward_list 性能之间的区别?

与c++11一样,我们有两种类型的列表:std::listlst={1,2,3,4,5};std::forward_listflst={5,4,3,2,1};我们知道list是基于双向链表的,forward_list是基于单向链表的。我们应该如何决定使用哪一个?以上任何列表是否有任何性能优势? 最佳答案 Howshouldwedecidewhichonetoused?决定是否需要双向迭代。如果前向迭代足够好,请使用std::forward_list,除非您需要支持早于C++11的C++版本,后者可能只有std::list。Isthe

c++ - 使用初始化列表创建单项 vector

我有一个函数func这是重载采取std::vector参数或Obj争论。#include#includeclassObj{inta=6;};voidfunc(conststd::vector&a){std::cout实际输出:therehere预期输出:herehere好像{obj}不初始化vector,而是初始化对象。我猜想在初始化哪种类型时有一些优先顺序。如何精确控制?(使用g++(Ubuntu8.3.0-6ubuntu1)8.3.0编译的示例。)我发现了可能的重复项(c++11singleelementvectorinitializationinafunctioncall),尽管

c++ - 为什么我不能用统一初始化来初始化一个字符串?

我有一个模拟窗口的程序;所以我将窗口的内容存储在成员数据content中,它是std::string类型:classWindow{usingtype_ui=unsignedint;public:Window()=default;Window(type_ui,type_ui,char);voidprint()const;private:type_uiwidth_{};type_uiheight_{};charfill_{};std::stringcontent_{};mutabletype_uitime_{};};Window::Window(type_uiwidth,type_uihe

c++ - boost::container 是否支持 C++11 初始化列表?

在Boost.Container网站上我们可以看到:Boost.Containerdoesnotsupportinitializerlistswhenconstructingorassigningcontainersbutitwillsupportitforcompilerswithinitialized-listsupport.(...)对不起,如果我只是愚蠢,但我真的不知道如何阅读它。这是否意味着它会在不可预测的future这样做,或者它现在应该与符合标准的编译器一起工作?我已经在GCC4.7和ICC13.0上测试过它,两者都不起作用,但我相信我可能错过了一些非常重要的东西,比如正

c++ - 嵌套的 std::initializer_lists 的数据元素是否保证是连续的?

可以通过嵌套大括号括起来的列表来创建多维初始化器,如{{1,2,3},{4,5,6}}中所示。接受它的函数可以使用嵌套的std::initializer_list编写。是否保证数据元素是连续的?这是一个例子:voidf(std::initializer_list>a){for(autoconst&p:a)for(autoconst&q:p)std::cout上面的代码在我的机器上输出了连续的地址。0x400c600x400c640x400c680x400c6c0x400c700x400c74有保证吗?更新答案一定是否定的。voidg(std::initializer_lista,std

Java 将 List 转换为 String常见方式

将List转换为String的几种方式使用List的toString()方法将List转换为String;结果前后会带有英文的中括号[],如:[1,2,3,4,5]使用Java8stream流中的Collections.joining()方法,带有逗号分隔符或自定义分隔符将集合转成String字符串使用String.join()方法将带有逗号分隔符或自定义分隔符的集合转换为字符串使用Apachecommons包下的StringUtils.join()方法;转成的String结尾带有分隔符小尾巴,如:"张三,李四,"使用StringBuilder、StringBuffer的append方法自定义