vector<pair<ofVec3f, ofVec3f>> Geometry;
// where ofVec3f is a class with a constructor w/ an initializer list
// inline ofVec3f::ofVec3f( float _x, float _y, float _z ):x(_x), y(_y), z(_z) {}
Geometry.emplace_back((1.0f, 2.0f, 3.0f), (4.0f, 5.0f, 6.0f));
我试图在我的向量中放入一些值,而不必创建一个临时的std ::对ofVec3f
此代码在Visual Studio 2017中编译。但是上面的代码在执行时会分配值Geometry [0] .first = {3.0,3.0,3.0}和second = {6.0,6.0,6.0}
我做错了什么?
答案 0 :(得分:4)
尝试使用分段构造函数,这很好地保留了移动语义的规则(更多关于它here)
#qj-tabs {
display: flex !important; /* Will not work unless defined as display: flex */
flex-direction: row !important;
flex-wrap: wrap !important;
}
#tabs-menu .wrapped .item {
border-radius: 5px !important;
border: 1px lightgray solid !important; /* Just styling for the default theme here */
margin: 0 2px 2px 0 !important;
}
#tabs-menu .wrapped .active.item {
background-color: lightgray;
}
答案 1 :(得分:3)
如果没有使用std::piecewise_construct
和std::forward_as_tuple
作为@Ruan的答案指出,则无法执行此操作,这是因为(1.0f, 2.0f, 3.0f)
和(4.0f, 5.0f, 6.0f)
被视为独立表达式。两个表达式都使用2个逗号运算符进行计算,它们基本上只返回右侧表达式。这会为您提供(3.0f)
和(6.0f)
,这就是您的价值来源。