草庐IT

c++ - 使用 make_shared<std::thread> 创建 shared_ptr<std::thread> 的实例

考虑以下代码:classA{....shared_ptrmThread;voidStep();voidLaunchTrhead();}voidA::LaunchThread(){...mThread=make_shared(Step);//Thislinegivesanerror...}voidA::Step(){...}我正在尝试初始化共享指针mThread以便它调用函数Step。但是,编译器给我错误“类型引用的无效初始化...来自类型‘未解析的重载函数类型’的表达式”。显然我在做一些愚蠢的事情,但我不能指责它。有人可以帮忙吗?提前致谢! 最佳答案

c++ - 如何分别针对整型和浮点型专门化模板函数?

考虑函数templatevoidFun(Tt);.我怎样才能分别对整型和浮点型有不同的实现?我猜积木是std::enable_if,std::is_integral,std::is_floating_point.但我不能以一种优雅的方式将它们放在一起:-(.附言我有可用的C++11。 最佳答案 参见std::enable_if的示例代码在cppreference.com.编辑:将上面链接中的代码改编如下:#include#includetemplatetypenamestd::enable_if::value>::typefoo(T

c++ - 一行输入多个数字

我想知道如何在一行中接受多个数字而无需事先确切知道有多少。例如,如果我有1234作为输入,我可以使用:cin>>a>>b>>c>>d;但是,如果我不知道数量是4,那么我就无法使用该方法。将输入存储到vector中的正确方法是什么?提前致谢 最佳答案 您可以读取所有输入,直到std::string类型的对象中的换行符,然后从该字符串中提取数字并将它们放置在例如vector中。这是一个随时可用的例子#include#include#include#include#includeintmain(){std::strings;std::ge

c++ - 'unused' 的初始化被 'goto label' 跳过 - 为什么我为 std::string 而不是为 int 获取它?

我在某些代码中遇到了这个错误,经过一些试验后我偶然发现了这个怪异之处——我为std::string得到了它,但没有为int得到它。对于std::string我得到errorC2362:initializationof'unused'isskippedby'gotolabel':{gotolabel;std::stringunused;label:;}对于int我没有收到任何错误,但是:{gotolabel;intunused=10;label:;}为什么不同?是因为std::string有一个非平凡的析构函数吗? 最佳答案 这包含在

c++ - 并行写入相同的值

我有一个生成多个线程的程序,这些线程可能会将完全相同的值写入完全相同的内存位置:std::vectorvec(32,1);//Initializevecwith32times1std::vectorthreads;for(inti=0;i在这个简化的代码中,所有线程都可能尝试将完全相同的值写入vec中的相同内存位置。.这是一场可能触发未定义行为的数据竞争,还是安全的,因为在所有线程再次加入之前从未读取值?如果存在潜在危险的数据竞争,将使用std::vector>而不是std::memory_order_relaxed商店足以防止数据竞争? 最佳答案

c++ - 试图仅在 C++ 中模拟 Matlab "unique"函数

我有以下vector,v=[9295]及其唯一元素c=[259]按升序排列。我想提取vectoru=[3132]。uvector包含vectorc中唯一元素的索引,从而重构vectorv。我的想法是遍历v并借助基于c的唯一值构建的哈希表来获取索引值。这有意义吗?如果是的话,你能请一些人在c++中提出一种方法吗?高度赞赏其他建议(我对有效的实现感兴趣,因为v和c矩阵足够大)。最好的问候,托特 最佳答案 C++的索引是从0开始的,这样写比较正确u={2,0,2,1};您可以使用标准算法来完成任务。例如(这里我假设vectorc已经以某种

c++ - <cstdint> 与 std::size_t 类型

从我对boost的窥视中和libstdc++,库通常使用std::size_t和std::ssize_t每当事先不知道无符号/有符号索引的上限/下限时。我的问题是:为什么不使用uintmax_t来自而不是std::size_t和intmax_t而不是std::ssize_t? 最佳答案 前者是C++标准的一部分,后者不是。更准确地说,cstdintheader是最近才引入的(在C++11中)。这是因为stdint.h本身是C99的一部分,比C++98更新。 关于c++-与std::siz

c++ - std::list 是否保证项目永远不会移动到不同的内存位置?

这个问题在这里已经有了答案:IteratorinvalidationrulesforC++containers(6个答案)关闭8年前。是否保证一旦std::list或std::forward_list项被分配,它将保留在相同的内存位置(地址)直到被销毁?当然,复制列表本身除外。

C++ 编译器无法识别 std::stringstream::swap

我正在尝试使用g++(GCC)4.8.220131212(RedHat4.8.2-7)编译以下代码:#includeusingnamespacestd;intmain(intargc,char**argv){autox=1;stringstreams1,s2;s1.swap(s2);}我收到以下错误:g++-g-std=c++0x-cmain.cppmain.cpp:Infunction‘intmain(int,char**)’:main.cpp:8:5:error:‘std::stringstream’hasnomembernamed‘swap’s1.swap(s2);^make:*

c++ - std::wstring 在 Windows 上是否支持 UTF-16 和 UTF-32?

我正在学习Unicode,有几个问题希望得到解答。1)我读过,在Linux上,std::wstring是4个字节,而在Windows上,它是2个字节。这是否意味着Linux内部支持是UTF-32而Windows是UTF-16?2)std::wstring的使用是否与std::string接口(interface)非常相似?3)VC++是否支持使用4字节的std::wstring?4)如果使用std::wstring,是否必须更改编译器选项?作为旁注,我遇到了一个用于使用UTF-8的字符串库,它具有与std::string非常相似的接口(interface),它提供了熟悉的功能,例如长度