草庐IT

-std=gnu99

全部标签

c++ - std::bind 类成员函数

我有这个代码:#include#includestructFoo{intget(intn){return5+n;}};intmain(){Foofoo;autoL=std::bind(&Foo::get,&foo,3);std::cout似乎是这样的:autoL=std::bind(&Foo::get,&foo,3);相当于:autoL=std::bind(&Foo::get,foo,3);为什么? 最佳答案 std::bind()按值接受其参数。这意味着在第一种情况下,您将按值传递一个指针,从而得到一个指针的拷贝。在第二种情况下,

c++ - std::string::clear 是否回收与字符串关联的内存?

例如,如果将一个文本文件加载到std::string中,对它做了我需要做的事情,然后对其调用clear(),这会释放保存文本的内存吗?或者我是否最好将其声明为指针,在需要时调用new,并在完成后删除它? 最佳答案 调用std::string::clear()只是将大小设置为零。capacity()不会改变(reserve()比当前保留的内存少也不会改变容量)。如果你想回收分配给字符串的内存,你需要按照以下方式做一些事情std::string(str).swap(str);复制字符串str通常只会保留合理数量的内存,并将其与str的表

c++ - std::endl 在每个平台上究竟代表什么?

考虑UNIX、Windows和Mac以及输出流(二进制和文本),什么是std::endl代表,即,或?或者无论什么平台/编译器,它总是一样的?我问的原因是我正在编写一个TCP客户端,它讨论一个协议(protocol),该协议(protocol)期望每个命令以结尾。.所以我想知道是否使用std::endl或"\r\n"在我的信息流中。编辑:好的,所以一个刷新缓冲区而另一个不刷新。我明白了。但是,如果我将文本输出到文件,则为'\n'等于还是转换为在Windows和是否在Unix上?我还没有看到明确的答案。 最佳答案 代码:stream所

c++ - std::unordered_map 初始化

当我访问std::unordered_mapusingoperator[]中的元素时第一次,它是自动创建的。关于其初始化的保证是什么(如果有的话)?(保证是值初始化,还是只构造)?例子:std::unordered_mapsize;char*test=newchar[10];size[test]+=10;在这个序列的末尾,size[test]是否保证为10? 最佳答案 Issize[test]guaranteedtobe10attheendofthissequence?是的。在代码的最后一行,size[test]将元素值初始化为T(

c++ - 如何获取 std::wstring 的字节大小?

我正在使用std::wstring作为我的Unicode样式字符串。现在我想得到wstring的字节大小。如果我使用wstring的size()方法,我只得到字符总数在我的wstring中。但是字节应该是size()*2。有没有官方的方法来获取这个字节大小?我不想用size()*2在我的程序中.....我想在RegSetValueExW中用作最后一个参数。 最佳答案 使用str.size()*sizeof(wchar_t)或等价物。事实上,除了Windows之外,我想不出任何其他平台具有2字节wchar_t,4字节更为常见。

c++ - std::map 键的要求(设计决策)

当我制作std::map,C++对我的期望是my_data_type有自己的operator.structmy_data_type{my_data_type(inti):my_i(i){}booloperator原因是你可以导出operator>和operator==来自operator.b表示a>b,所以有operator>.!(a表示a既不小于b也不大于它,因此它们必须平等。问题是:为什么C++设计器不要求operator==明确定义?显然,operator==是不可避免的std::map::find()并从std::map中删除重复项.为什么要实现5个操作并调用一个方法两次,以免

c++ - 为什么需要 std::move?

我读了一个beautifularticleC++11中的移动语义。这篇文章是用一种非常直观的方式写的。下面给出文章中的示例类。classArrayWrapper{public://defaultconstructorproducesamoderatelysizedarrayArrayWrapper():_p_vals(newint[64]),_metadata(64,"ArrayWrapper"){}ArrayWrapper(intn):_p_vals(newint[n]),_metadata(n,"ArrayWrapper"){}//moveconstructorArrayWrapp

c++ - 为什么锁定 std::mutex 不会阻塞线程

我写了下面的代码来测试我对std::mutex的理解intmain(){mutexm;m.lock();m.lock();//expecttoblockthethread}然后我得到一个system_error:deviceorresourcebusy。第二个m.lock()不是应该阻塞线程吗? 最佳答案 来自std::mutex:Acallingthreadmustnotownthemutexpriortocallinglockortry_lock.来自std::mutex::lock:Iflockiscalledbyathrea

c++ - 如何轻松检查 std::map 和 std::unordered_map 是否包含相同的元素

我正在编写GoogleTest单元测试,我想检查unordered_map的内容是否与std::map相同我不认为std::equal将作为std::map中的元素工作是根据一个标准排序的。顺序并不重要。 最佳答案 我认为没有比遍历一张map的所有元素并检查它们是否存在于另一张map中更好的方法了。如果你也检查元素的数量是否相同,你就会知道map是否完全相同。例如:templateboolmaps_equal(conststd::map&map,conststd::unordered_map&unordered_map){retur

c++ - C++11 中的 std::nearbyint 与 std::round

C++11引入了std::nearbyint和std::round功能。两者都返回“最接近的”整数值。我应该在何时何地更喜欢其中一个?我用0.5的值测试了它们:案例1:Demofornearbyint#include#includeintmain(){std::cout输出:0案例2:Demoforround#include#includeintmain(){std::cout输出:1为什么输出不同? 最佳答案 std::round函数忽略currentroundingmode而std::nearbyint将其考虑在内。您可以更改舍