草庐IT

libboost_filesystem-vc

全部标签

c++ - VC++ 允许对 STL 容器使用 const 类型。为什么?

STL容器要求存储的值是可复制构造和可分配的。constT显然不是任何T的可分配类型,但我尝试使用它(只是好奇)并发现它可以编译,而且表现得像可分配类型。vectorv(1);v[0]=17;这在VisualStudio2008中成功运行并将v[0]分配给17。 最佳答案 这不是其他人建议的实现中的错误。违反C++标准库设施的要求不会使您的程序格式错误,它会产生未定义的行为。您违反了存储在容器中的值类型必须是可复制构造和可分配的要求(显然,const类型不可分配),因此您的程序表现出未定义的行为。C++标准中适用的语言可以在C++0

c++ - 如何在 VC++ 中添加用于编译的外部库?

我曾使用过几个VisualC++编译器(VC97、VC2005、VC2008),但我还没有真正找到将外部库添加到我的构建的明确方法。我来自Java背景,Java库就是一切!通过在我的Linux机器上编译开源项目,我了解到似乎需要包含该库的所有源代码,但那些.so文件除外。我也听说过.lib静态库和.dll动态库,但我仍然不完全确定如何将它们添加到构建中并使其工作。怎么办? 最佳答案 C++中的库也被认为很有帮助,但集成它们的方式与Java不同,因为编译器只需要查看库的接口(interface),它通常在头文件中声明。在Java中,编

c++ - VC++ 15 为 lambda 捕获调用了错误的复制构造函数?

考虑以下程序:#includestructX{X()=default;X(X&){std::cout使用VC++15,我得到了输出constcalledconstcalled7使用Clang3.9,我得到了non-constcalled7这里哪个编译器是正确的? 最佳答案 我会说clang是对的。当lambda捕获x并且返回值的构造函数被优化出来时,最适合的构造函数只被调用一次。这就是为什么你只获得一个non-constcalled。见here和here有关复制省略和RVO的更多详细信息。

c++ - 为什么 boost::filesystem::path 和 std::filesystem::path 缺少 operator+?

考虑以下关于路径分解的断言,其中每个局部变量,例如stem具有明显的初始化,例如autostem=path.stem()—assert(root_path==root_name/root_directory);assert(path==root_name/root_directory/relative_path);assert(path==root_path/relative_path);assert(path==parent_path/filename);assert(filename==stem+extension);这一切都有效,除了最后一行——因为fs::path没有定义ope

c++ - 从 boost::filesystem 创建目录成功,但是没有创建目录

我有以下代码,虽然对boost::filesystem::create_directory的调用返回true,但我没有看到在我的项目文件夹中创建目录。这可能是什么原因?boost::filesystem::pathdir("newdir");if(boost::filesystem::create_directory(dir))std::cout我正在使用VS2008和Win7HomePremium。 最佳答案 您可能患有foldervirtualization.还可以尝试使用完整路径创建一个目录,这样您就不会受到任何当前应用程序目

c++ - 为什么在 c++20 中不推荐使用 std::filesystem::u8path?

在c++17中引入,std::filesystem::u8path似乎在c++20中已弃用。这个选择的原因是什么?我应该在c++17中使用什么?c++20应该用什么? 最佳答案 因为,由于C++20特性char8_t的存在,这将起作用:pathp(u8"A/utf8/path");u8path的存在允许检测UTF-8字符串和窄字符串之间的差异。但由于C++20会为此提供一个实际的type,因此不再需要。WhatshouldIuseinc++17?使用u8path。弃用并不意味着已删除或无法访问。它仅仅意味着受到最终删除。

c++ - 为什么 boost::filesystem::canonical() 需要目标路径存在?

boost::filesystem::canonical(constpath&p)的文档状态:Overview:Convertsp,whichmustexist,toanabsolutepaththathasnosymboliclink,dot,ordot-dotelements....Remarks:!exists(p)isanerror.这样做的结果是,如果p标识了一个目标不存在的符号链接(symboliclink),则函数将失败并返回filenotfound并且不返回路径。这对我来说似乎过于严格:仅仅因为链接的目标不存在,我看不出函数无法解析该不存在目标的path的原因。(相比之

c++ - 在 C++17 中使用 <filesystem> 成员链接错误

我在Ubuntu16.04上使用gcc7.2,我需要使用来自C++17的新文件系统库。即使确实有一个名为experimental/filesystem的库,我也不能使用它的任何成员。例如,当我尝试编译这个文件时:#include#include#includeusingnamespacestd;namespacefs=std::experimental::filesystem::v1;intmain(){fs::pathp1="/usr/share/";}我收到如下所示的编译错误:$g++-7test.cpp-std=c++17/tmp/ccfsMnlG.o:Infunction`st

c++ - boost::filesystem::recursive_directory_iterator 带过滤器

我需要递归地从目录及其子目录中获取所有文件,但不包括几个目录。我知道他们的名字。是否可以使用boost::filesystem::recursive_directory_iterator? 最佳答案 是的,在遍历目录时,您可以测试排除列表中的名称并使用递归迭代器的no_push()成员来防止它进入这样的目录,例如:voidselective_search(constpath&search_here,conststd::string&exclude_this_directory){usingnamespaceboost::filesy

c++ - 为什么 VC++ 字符串不被引用计数?

STL标准不要求对std::string进行引用计数。但实际上大部分C++实现提供了refcounted、copy-on-write字符串,允许你通过按值字符串作为原始类型。这些实现(至少g++)也使用原子操作使这些字符串无锁且线程安全。简单的测试显示了写时复制语义:#include#includeusingnamespacestd;voidfoo(strings){cout在使用非常量成员之后,仅打印两个地址。我使用HP、GCC和Intel编译器测试了这段代码,得到了相似的结果——字符串用作写时复制容器。另一方面,VC++2005清楚地表明每个字符串都是完全复制的。为什么?我知道VC