草庐IT

初始化OpenStack

全部标签

c++ - 从 2d std::vector 初始化 Eigen::MatrixXd

这应该非常简单,但我无法在Eigen文档中找到实现它的方法。假设我有一个2Dvector,即std::vector>data假设它充满了10x4数据集。我如何使用这些数据来填写Eigen::MatrixXdmat.最明显的方法是像这样使用for循环:#PseudocodeEigen::MatrixXdmat(10,4);fori:1->10mat(i,0)=data[i][0];mat(i,1)=data[i][1];...end但应该有更好的Eigen原生方法? 最佳答案 没问题。你不能一次完成整个矩阵,因为vector将单行存储

c++ - 使用删除的复制构造函数初始化 const 引用成员

此代码在B中有一个constA&a成员,其中A有一个已删除的复制构造函数,在GCC中无法编译4.8.1,但它在clang3.4中工作正常:classA{public:A()=default;A(constA&)=delete;A&operator=(constA&)=delete;};classB{public:B(constA&a):a{a}{}private:constA&a;};intmain(){Aa{};Bb{a};}哪一个编译器是正确的?GCC中的错误是:prog.cpp:Inconstructor‘B::B(constA&)’:prog.cpp:11:14:error:u

c++ - 启用默认初始化列表构造函数

我相信现代C++初始化列表对于初始化对象非常有用,以至于无需定义自己的构造函数:structpoint{floatcoord[3];};pointp={1.f,2.f,3.f};//nice!但是,当我的类继承自另一个类时,这不起作用:templateclassserializable{protected:serializable()=default;...//otherstuff}structpoint:publicserializable{floatcoord[3];};pointp={1.f,2.f,3.f};//Doesn'twork:(我尝试将point()=default;

c++ - 为什么允许使用任意值初始化枚举类临时值?

我在CppCon2014的一次演讲中遇到了如下代码,这让我很困惑。观众没有评论就接受了,所以我认为这是合法的:enumclassFoo{Bar};Fooconstv1=Foo(5);问题是:为什么要编译?我希望编译失败并提示我们不能将int转换为Foo。下面稍作修改的行因预期错误而失败:Fooconstv1(5); 最佳答案 作用域枚举类型有一个隐式底层类型int,假设没有指定其他底层类型。可以表示int类型的所有可能值。7.2p5:[...]Forascopedenumerationtype,theunderlyingtypeis

c++ - 如何在构造函数的初始化列表中初始化共享指针?

如何在构造函数的初始化列表中初始化共享指针?我有这个:Foo::Foo(constcallback&cb){Barbar;bar.m_callback=cb;m_ptr=std::make_shared(bar);//...}我想将其放入构造函数的初始化列表中。像这样的东西:Foo::Foo(constcallback&cb):m_ptr(std::make_shared(?????)){//...}Bar是一个struct:structBar{callback_typem_callback;//etc.}; 最佳答案 添加构造函数

c++ - 对函数参数的要求是否也适用于初始化列表?

所以我在这里阅读:https://stackoverflow.com/a/598150/2642059这是非法的:foo(i++,i++);但我相信那是因为没有强制序列,据我所知,初始化列表就是这种情况。那么这是法典吗?constintfoo[]={i++,i++}; 最佳答案 是的,初始化子句的求值顺序在花括号初始化列表中得到保证。来自标准,§11.6.4/4List-initialization[dcl.init.list]:(强调我的)Withintheinitializer-listofabraced-init-list,t

c++ - 为什么我不能在 gcc 的初始值设定项中访问默认参数?

这在clang中编译但不在gcc:voidf(intx=decltype(x){});gcc中的错误表明x未在此范围内声明,但根据3.3.2/1变量x应该在范围内:Thepointofdeclarationforanameisimmediatelyafteritscompletedeclarator(Clause8)andbeforeitsinitializer(ifany),exceptasnotedbelow.[Example:intx=12;{intx=x;}Herethesecondxisinitializedwithitsown(indeterminate)value.—en

c++ - 为什么聚合结构可以用大括号初始化,但不能使用与大括号初始化相同的参数列表来放置?

好像thiscode:#include#includestructbla{std::stringa;intb;};intmain(){std::vectorv;v.emplace_back("string",42);}在这种情况下可以正常工作,但它不能(我明白为什么)。为bla提供构造函数可以解决这个问题,但会消除类型的聚合性,这可能会产生深远的影响。这是对标准的疏忽吗?还是我错过了某些情况,在这些情况下它会在我面前爆炸,或者它没有我想象的那么有用? 最佳答案 IsthisanoversightintheStandard?它被认为是

c++ - 初始化 STL `map` 大小

是否可以初始化STLmap大小?我知道我的map最后会有多少元素,我想在一开始就分配所有需要的内存。 最佳答案 有几个选项:您可以尝试将map与有状态分配器一起使用。例如来自Boost.Container或者来自C++11。或者,如果您接受无状态分配器的限制,那么您甚至可以使用C++98/03中的映射。考虑使用unordered_map(同样来自Boost或来自C++11)——它将桶计数作为构造函数参数。它与map的不同之处在于它基于散列而不是严格的弱排序。另一个选项是来自Boost的flat_map.它具有reserve成员函数。

c++ - 具有平凡构造函数的派生类的统一初始化

我正在尝试使用C++11统一初始化解决一些极端情况,但我无法弄清楚这是为什么:structBase{intx,y,z;};structDerived:Base{};static_assert(std::is_trivial::value,"Basemustbetrivial");static_assert(std::is_trivial::value,"Derivedmustbetrivial");Baseb{1,2,3};//1)ThiscompilesfineDerivedd{10,20,30};//2)Thisfails标记为2的行因clang3.1和g++4.7均出现“没有匹配