我有一个类型的C++对象 ObjectArray
typedef map<int64_t, std::unique_ptr<Class1>> ObjectArray;
Run Code Online (Sandbox Code Playgroud)
创建一个unique_ptr
新的类型对象Class1
并将其插入到类型的对象中的语法是什么ObjectArray
?
我有一个类,其副本构造函数被显式删除(因为A在内部使用指针,我不想陷入浅层复制陷阱):
class A {
public:
A(const A&) = delete;
A& operator=(const A&) = delete;
A(const B& b, const C& c);
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个类型的向量,vector<A> aVector;
我想在其中插入元素 - 所以我使用emplace_back
:
aVector.emplace_back(b, c);
Run Code Online (Sandbox Code Playgroud)
但是,这无法使用gcc编译,我收到错误 -
third-party/gcc-4.7.1-glibc-2.14.1/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/bits/stl_construct.h: In instantiation of 'void std::_Construct(_T1*, _Args&& ...)
third-party/gcc-4.7.1-glibc-2.14.1/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/bits/stl_uninitialized.h:77:3: required from 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator)
third-party/gcc-4.7.1-glibc-2.14.1/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/bits/stl_uninitialized.h:119:41: required from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator)
third-party/gcc-4.7.1-glibc-2.14.1/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/bits/stl_uninitialized.h:260:63: required from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&)
third-party/gcc-4.7.1-glibc-2.14.1/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/bits/stl_uninitialized.h:283:67: required from '_ForwardIterator std::__uninitialized_move_if_noexcept_a(_InputIterator, _InputIterator, _ForwardIterator, _Allocator&)
third-party/gcc-4.7.1-glibc-2.14.1/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/bits/vector.tcc:410:6: required from 'void std::vector<_Tp, _Alloc>::_M_emplace_back_aux(_Args&& ...)
third-party/gcc-4.7.1-glibc-2.14.1/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/bits/vector.tcc:102:4: …
Run Code Online (Sandbox Code Playgroud) 在其中一个C++程序中,我看到了一个函数原型: int Classifier::command(int argc, const char*const* argv)
什么const char*const* argv
意思?它是一样的const char* argv[]
吗?是否const char** argv
也意味着相同?
考虑这个构造函数: Packet() : bits_(0), datalen_(0), next_(0) {}
注意bits_
,datalen_
并且next_
Packet类中的字段定义如下:
u_char* bits_;
u_int datalen_;
Packet* next_;
Run Code Online (Sandbox Code Playgroud)
这部分构造函数意味着什么? bits_(0), datalen_(0), next_(0)
我在类中创建了一个静态成员数组GTAODV
.
static int numdetections[MAXNODES];
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在类方法中访问此数组时(下面的示例),
numdetections[nb->nb_addr]++;
for(int i=0; i<MAXNODES; i++) if (numdetections[i] != 0) printf("Number of detections of %d = %d\n", i, numdetections[i]);
Run Code Online (Sandbox Code Playgroud)
链接器在编译期间出错:
gtaodv/gtaodv.o: In function `GTAODV::command(int, char const* const*)':
gtaodv.cc:(.text+0xbe): undefined reference to `GTAODV::numdetections'
gtaodv.cc:(.text+0xcc): undefined reference to `GTAODV::numdetections'
gtaodv/gtaodv.o: In function `GTAODV::check_malicious(GTAODV_Neighbor*)':
gtaodv.cc:(.text+0x326c): undefined reference to `GTAODV::numdetections'
gtaodv.cc:(.text+0x3276): undefined reference to `GTAODV::numdetections'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我有一个代码片段,看起来有点像这样:
std::unordered_map<FooId, Foo> fooMap;
Foo foo1(..);
fooMap.emplace(foo1.id(), std::move(foo1));
Run Code Online (Sandbox Code Playgroud)
是安全的,即foo1.id()
之前调用的C++语言标准保证std::move(foo1)
吗?
我有一个结构的向量 - 说结构是这样的:
struct foo {
int bar1;
int bar2;
}
Run Code Online (Sandbox Code Playgroud)
现在我想更新向量的每个元素,更新乘以bar1
2.
这样做的天真方法是迭代向量的每个元素,但有没有更好的方法来实现这一点,可能是通过使用带有c ++ 11 lambda函数的库函数?