草庐IT

std_logic

全部标签

c++ - std::remove_extent 有什么用?

我正在研究C++11提供的新功能,我发现了std::remove_extent.typedefstd::remove_extent::typeA;//Aisint但是,除了通过从给定类型中删除维度来从现有类型定义新类型之外,我找不到它的用法。谁能说明为什么C++11引入了这个特性?使用它有什么好处吗? 最佳答案 在C++标准本身中有一个使用std::remove_extent的好例子。创建智能指针对象的模板函数std::unique_ptrtemplateunique_ptrmake_unique(size_tn);返回以下表达式(

c++ - 如何使用 C++11 std::bind 绑定(bind)类中同名的成员函数之一

classTest{public:intwork(){coutf=std::bind(&Test::work,&test);threadth(f);th.join();return0;}如上代码,我想绑定(bind)一个类的成员函数voidwork(void)(暂且命名为Test),但是出现编译器错误提示无法确定使用哪个重写函数。我无法更改类Test,因为它属于一个库,如何实现我的目标?提前致谢! 最佳答案 为什么不完全跳过std::bind而使用lambda?autofp=[&t](){t.test()};作为奖励,您的可执行文件

c++ - std::move 和映射赋值

我对标准如何管理这种情况感到有点困惑:structFoo{Foo&operator=(std::stringxxx){x=std::move(xxx);return*this;}std::stringx;};std::mapbar;std::stringbaz="somestring";bar[baz]=std::move(baz);编译器能否生成代码,以便baz被movebefore它用于初始化和获取对bar中元素的引用(初始化std::stringxxx)?或者这段代码是否安全并且没有未定义的行为? 最佳答案 hell不。表达式

c++ - Clang 与 gcc std::crbegin with boost::iterator_range

使用libc++的Clang3.8.1编译以下程序:#include#include#include#include#includeintmain(){conststd::vectorv{1,2,3};constautorange=boost::make_iterator_range(v);std::copy(std::crbegin(range),std::crend(range),std::ostream_iterator{std::cout,""});std::cout但是带有libstdc++的gcc6.1.0没有。gcc错误的第一行是:error:nomatchingfunc

c++ - Qt 5.7 将 -std=gnu++11 添加到我的编译器标志,破坏 -std=c++14

我在我的CMakeLists.txt中设置了以下标志set(CMAKE_CXX_FLAGS"-std=c++14-g-O0")然后我使用find_package找到Qt5Testfind_package(Qt5TestREQUIRED)然后我正在创建一个ModelTest图书馆add_library(modeltestSTATIC${SRCS})target_link_libraries(modeltestQt5::Test)出于某种原因,我将-fPIC-std=gnu++11添加到我的编译器标志中CMakeFiles/modeltest.dir/flags.make:CXX_FLAG

c++ - 通过与不同类型的值进行自定义比较来查找 std::set 的元素

考虑以下带有自定义比较器的std::set玩具示例:#includestructA{A():a(cnt++){}constinta;staticintcnt;};intA::cnt=0;structcomp{booloperator()(constA&left,constA&right){returnleft.asa;for(inti=0;i请注意,A不能简单地从整数创建。我想在sa中寻找给定值为A::a的A,无需构造aA类型的临时对象,即我正在搜索类似的东西sa.find(4)带有自定义比较器,允许直接比较整数与A类型的对象。这可能吗? 最佳答案

c++ - 如何在 std::map 中尝试放置 POD 结构?

我有一张int->{basictypes}的map,我需要存储。我想简单地创建一个struct{intf1,intf2;};并直接存储值,在存储过程中就地构造结构。我不希望有任何重复的键,所以try_emplace看起来很理想。我写了这段代码://mcve.cpp#include#includestructvarious{intf1,f2;};usingmap_t=std::map;voidexample(){map_tdict;//dict.try_emplace(1,2);dict.try_emplace(1,1,2);//dict.try_emplace(1,{1,2});}但是

c++ - 如何比较 time_t 和 std::filesystem::file_time_type

我正在将一些代码从boost::filesystem转换到std::filesystem。以前使用的代码boost::filesystem::last_write_time()它返回一个time_t,因此直接与我已经持有的time_t对象进行比较是微不足道的。顺便说一句,我持有的这个time_t是从很久以前保存的文件内容中读取的,所以我坚持使用这种“自unix纪元以来的时间”类型。std::filesystem::last_write_time返回std::filesystem::file_time_type.是否有可移植的方法将file_time_type转换为time_t,或者以其

c++ - std::array<std::vector> 中的大括号省略

我正在为C++17使用g++进行编译。我有以下内容:std::array,2>v={{{1,2},{3,4}}};我不明白为什么如果我删除数组的双括号它就不再起作用了。std::array,2>v={{1,2},{3,4}};//Doesnotcompile我了解std::array的工作原理以及通常需要双大括号,但在为C++17进行编译时,我希望大括号省略发挥作用。为什么大括号省略在这里不适用? 最佳答案 std::array,2>是有效的structarray{std::vectorelems[2];};elems是一个子聚合就

c++ - 为什么我不能创建 std::ifstreams 的 std::stack?

为什么以下不起作用:#include#include#includestd::stacks;-PT 最佳答案 std::stack(与所有STL容器一样)要求其包含的类型是“可分配的”。在STL中,这意味着它必须有一个复制构造函数和一个operator=。std::ifstream没有这些。您可以想象为什么您不希望能够复制和分配I/O流;当同一个流有两个拷贝时应该发生什么的语义并不明显。读取或写入一个拷贝是否会影响另一个拷贝的位置?关闭一个流应该关闭另一个吗?等如果你想要“一个std::ifstream的容器”,那么你真正应该做的是