草庐IT

make_links_absolute

全部标签

c++ - std::make_unique 导致大幅减速?

我最近开始使用C++14而不是C++11对我的C++代码库进行现代化改造。在用C++14中的std::make_unique替换一次出现的std::unique_ptr.reset(new...)后,我意识到我的测试套件(由大约30个C++测试程序组成)运行速度慢了大约50%。旧的C++11代码(快速):classFoo{public:Foo(size_tsize){array.reset(newchar[size]);}private:std::unique_ptrarray;};新的C++14代码(慢):classFoo{public:Foo(size_tsize){array=s

c++ - 井字游戏 AI : How to Make the Tree?

在制作井字游戏机器人时,我在试图理解“树”时遇到了很大的困难。我理解这个概念,但我不知道如何实现它们。有人可以向我展示一个如何为这种情况生成树的示例吗?还是生成树的好教程?我想困难的部分是生成部分树。我知道如何实现生成一整棵树,但不知道它的一部分。 最佳答案 想象一下,在井字游戏中的任何一点,每一个可能的Action都是一个分支。板的当前状态是根。一个Action是一个分支。现在假设(一次一个),每个分支都成为当前状态。每个可能的移动都成为一个新的分支。树的叶子是当最后一步完成并且棋盘已满时。你需要一棵树的原因是,一旦它建成,你需要

c++ - 为什么这个makefile在 'make clean'上执行一个目标

这是我当前的makefile。CXX=g++CXXFLAGS=-Wall-O3LDFLAGS=TARGET=testcppSRCS=main.cppobject.cppfoo.cppOBJS=$(SRCS:.cpp=.o)DEPS=$(SRCS:.cpp=.d).PHONY:cleanallall:$(TARGET)$(TARGET):$(OBJS)$(CXX)$(CXXFLAGS)$(LDFLAGS)$(OBJS)-o$(TARGET).cpp.o:$(CXX)$(CXXFLAGS)-c$$@clean:rm-f$(OBJS)$(DEPS)$(TARGET)-include$(DEP

c++ - 带有 std::make_unique 的 push_back 或 emplace_back

基于these中的答案questionshere,我知道使用c++14的std::make_unique肯定比直接emplace_back(newX)更可取。也就是说,是不是更喜欢打电话my_vector.push_back(std::make_unique("constructor","args"));或my_vector.emplace_back(std::make_unique("constructor","args"));也就是说,在添加由std::make_uniquestd::unique_ptr时,我应该使用push_back还是emplace_back/?====编辑=

c++ - Visual Studio 用户使用 GCC/make 的介绍

我使用VisualStudio2010用C++开发了一个工具,我也想在Linux系统上部署它。代码本身的编程完全独立于平台,仅使用STL和标准库。现在我的问题是:我没有使用Linux的经验。然而,我尝试让我编写的一些其他程序使用GCC进行编译,结果是一大堆错误向我抛出,我花了3个小时才解决-太可怕了!从这次经历中注意到,如果我尝试将当前项目移植到GCC,我认为同样的情况即将发生,而且情况会更糟。我的问题是:VisualStudio用户需要知道什么才能成功让他们的程序在Linux上运行?(我需要学习make吗?)您是否知道一个很好的资源,它不涵盖整个GCC/Linux编程的主题,而是专门

c++ - 是否可以将导入的库添加到 target_link_libraries 来处理包含目录?

不知何故,我正在努力找出是否可以在CMake中定义导入的库,指定目标属性(include_directories和库路径),并希望一旦我将该项目添加到另一个项目中的target_link_libraries,CMake将附加包含目录.假设我在一个名为Module-Conf.cmake的文件中有一个导入的库:add_library(mymoduleSTATICIMPORTED)set_target_properties(mymodulePROPERTIESIMPORTED_LOCATION"${OUTPUT_DIR}/lib")set_target_properties(mymodule

c++ - 表达式 : auto p {make_pointer()}; 的不同编译器行为

以下程序的正确行为是什么?//example.cpp#include#includestructFoo{voidBar()const{std::coutMakeFoo(){returnstd::make_shared();}intmain(){autop{MakeFoo()};p->Bar();}当我在我的LinuxRHEL6.6工作站中编译它时,我得到以下结果:$g++-vgccversion5.1.0(GCC)$g++example.cpp-std=c++14-Wall-Wextra-pedantic$./a.outFoo::Bar()但是$clang++-vclangversio

c++ - Boost 是什么意思 "header-only libraries"和 "automatic linking"?

在Boostlibrarydocumentation页面,有两个类别分别名为“HeaderOnlyLibraries”和“AutomaticLinking”。我想“仅标题库”意味着您不必链接到Boost库才能使用它们,“自动链接”意味着你必须链接。但是当我使用Boost.Timer时,我必须链接一个名为timer的静态或动态库(libboost_timer.a和>libboost_timer.so.1.48.0和Linux库路径下的各种软链接(softlink)),这显然是Boost.Timer的确切库文件。我什至需要链接Boost.System和Boost.Chrono,虽然库本身使

c++ - 构造对象时有什么理由不使用 std::make_shared 吗?

我想不出任何情况std::shared_ptrobj(newObject("foo",1));会更喜欢autoobj=std::make_shared("foo",1);后者总是会产生更好的局部性并减少内存碎片。除了与返回原始指针的代码接口(interface)之外,是否有任何情况下您更愿意(或被迫)使用第一种形式? 最佳答案 Thelatteralwaysresultsinbetterlocalityandreducesmemoryfragmentation.不总是。鼓励实现对引用计数的对象和引用计数使用单个分配,但这不是必需这样

C++: LINK : debug\XXXXX.exe not found 或不是由最后一个增量链接构建的;执行完整链接

使用VisualStudio2008SP1,这一行:LINK:debug\XXXXX.exenotfoundornotbuiltbythelastincrementallink;performingfulllink每次编译项目时都会出现,无论我做了多么小的更改。这可能是什么原因? 最佳答案 老问题,但以防万一它仍然是一个问题(而且它是..)。增量链接与生成list文件不兼容(项目选择>链接器>list文件>生成list:是)。实际上,生成list会修改exe/dll,因此链接器必须进行完全链接。有一些解决方法,有关更多详细信息:ht