草庐IT

code-push

全部标签

C++ deque 的迭代器在 push_front() 之后失效

刚才,我正在阅读Josuttis的STL书。据我所知——c++vector是一个可以重新分配的c数组。所以,我明白了,为什么在push_back()之后所有的迭代器和引用都会变得无效。但我的问题是关于std::deque。据我所知,它是大块数组(c数组的c数组)。所以push_front()在开头插入元素,如果没有空间,deque分配新block,并将元素放在已分配block的末尾。在中间的insert()之后,所有引用和迭代器都变得无效,我明白为什么——所有元素都被移动了。但我真的误解了短语“...在push_back()和push_front()之后所有引用都保持有效,但迭代器不有

C++ STL 优化警告 : problem with the code or something more sinister?

我有一个正在开发的程序,我正在从使用数组切换到使用vector,但我遇到了问题。我将其简化为:#includeclassA{public:A(void);~A(void);private:std::vector>a;};A::A(void):a(){}A::~A(void){}这从g++(标志:-O2-Wunsafe-loop-optimizations,版本4.4.3(Ubuntu4.4.3-4ubuntu5)在Ubuntu10.04x86_64上)发出以下警告:/usr/include/c++/4.4/bits/STL_construct.h:在析构函数‘A::~A()’中:/us

c++ - 错误 MSB6006 : "CL.exe" exited with code 2

我正在用visualc++编写,当我编译时出现这个错误:C:\ProgramFiles(x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(147,5):errorMSB6006:"CL.exe"terminatoconilcodice2.有人知道为什么吗?提前致谢! 最佳答案 您实际上可以看到正确的错误消息,而不是Microsoft的任意错误代码。但是由于错误列表总是在出现错误时强制显示,所以它不是很明显。ErrorList选项卡旁

Job for docker.service failed because the control process exited with error code.:已解决

Jobfordocker.servicefailedbecausethecontrolprocessexitedwitherrorcode.See“systemctlstatusdocker.service”and“journalctl-xe”fordetails.:已解决问题描述Jobfordocker.servicefailedbecausethecontrolprocessexitedwitherrorcode.See“systemctlstatusdocker.service”and“journalctl-xe”fordetails.docker.service的作业失败,因为控制进程

c++ - 是否存在将 push_back 替换为 emplace_back 不正确的情况?

我能否通过将std::vector::push_back替换为emplace_back并使用C++11编译器编译它来破坏有效的C++03程序?通过阅读emplace_back引用,我认为这不应该发生,但我承认我没有完全获得右值引用。 最佳答案 我构建了一个简短的示例,当push_back被替换为emplace_back时实际上无法编译:#includestructS{S(double){}private:explicitS(int){}};intmain(){std::vector().push_back(0);//OKstd::v

c++ - LLVM 即时编译 : pass C++ exception through JIT code back to host application

我正在开发一个项目,我使用clang生成一些LLVMIR,然后在我的主机应用程序中进行JIT编译和运行。JIT代码调用宿主应用程序中的某些函数可能会引发异常。我希望通过JIT代码抛出异常并在主机应用程序中捕获。据我所知,这应该与LLVM一起使用,但不幸的是,我的测试应用程序总是因“在抛出‘int’实例后调用终止”而崩溃。让我举个简单的例子。我使用clang3.5将以下简单程序编译成LLVMIR:externvoidtest();extern"C"voidexec(void*){test();}与./clang-O0-S-emit-llvmtest.cpp-c结果为test.ll;Mod

c++ - 使用 GCC 查找无法访问的函数 ("dead code")

我正在寻找一种在(非常)大的C++项目中查找静态无法访问的函数的方法。我曾尝试使用doxygen和此处建议的其他静态分析工具,但似乎该项目太复杂了,他们无法处理。最后我决定使用GCC工具(g++、gprof、gcov等)是最安全的选择,尽管我不知道该怎么做。我认为g++优化消除了静态无法访问的函数,但我不确定如何获取它消除的函数的名称。你有什么建议吗? 最佳答案 死代码优化通常由链接器完成——编译器没有概览。但是,编译器可能已经删除了未使用的static函数(因为它们具有内部链接)。因此,您不应该查看GCC选项,而应该查看ld选项。

c++ - Visual Studio : MSB3073 error exited with code 1

大家。我正在VisualStudio2013中编译DCMTK3.6.1。我的操作系统是Windows8。我还使用了CMake3.2.3。我已经为ALL_BUILD项目成功编译了x64版本的debug和release。但是,对于INSTALL项目,我无法编译它,因为出现以下错误:Error1errorMSB3073:Thecommand"setlocal"C:\ProgramFiles(x86)\CMake\bin\cmake.exe"-DBUILD_TYPE=Release-Pcmake_install.cmakeif%errorlevel%neq0goto:cmEnd:cmEnden

c++ - 依赖于其他 slib 的静态库是否需要它们的实际 'code' 才能工作?

抱歉问题标题模糊,我只是想确定一些事情。静态库不与其他静态库链接,对吗?所以当我写一个slib:A,它使用另一个:B的功能时,我必须提供的只是B到A的header,而且只有那些,即使A实际上使用了B的功能?是吗?只要使用A的exe:X,有没有指定B.lib作为链接器输入?因此在链接时,链接器采用A.lib,它基本上只知道B的函数在其代码中的某处被调用,并以某种方式从B.lib中填充该信息,使A.lib成为“完整的”,在X与它现在工作的部分链接之前?这些问题背后的动机是摆脱一些链接器警告4006和丢弃的双重定义,我认为这应该可以解决问题,如果这实际上是一种有效的方法的话。

c++ - 使用 Code::Blocks 调试时提供程序参数

我似乎无法弄清楚如何将程序参数添加到代码块调试器的启动命令中。有人知道怎么做吗? 最佳答案 我找到了。项目-->设置程序参数(我一直在查看项目设置,就像visualstudio一样) 关于c++-使用Code::Blocks调试时提供程序参数,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1218014/