草庐IT

c++ - 为什么 std::uint32_t 与 uint32_t 不同?

我对c++有点陌生,我有一个编码任务,其中有很多文件已经完成,但我注意到VS2012似乎有以下语句的问题:typedefstd::uint32_t标识符;但是,似乎将其更改为typedefuint32_t标识符;消除错误。没有包含,这是在头文件中。我注意到定义在stdint.h中。如果是这样,为什么这段代码在VS之外是可以接受的(即使用g++正确编译)但在VS中是NotAcceptable?谁能解释一下? 最佳答案 区别在于一个在命名空间内,另一个不在。否则它们应该是相同的。第一个应该是C版本,第二个是C++版本。在C++11之前,

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++ - C++11 中的数组声明和初始化

这里有8种在C++11中声明和初始化数组的方法,在g++下看起来没问题:/*0*/std::arrayarr0({1,2,3});/*1*/std::arrayarr1({{1,2,3}});/*2*/std::arrayarr2{1,2,3};/*3*/std::arrayarr3{{1,2,3}};/*4*/std::arrayarr4={1,2,3};/*5*/std::arrayarr5={{1,2,3}};/*6*/std::arrayarr6=std::array({1,2,3});/*7*/std::arrayarr7=std::array({{1,2,3}});根据严格

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++ - C++、cin、cout、threads 和 sync_with_stdio 的损坏输出

我正在尝试用C++编写一个程序,以尽可能最快的方式处理大量数据包。来自标准的所有数据包都应尽可能快地读取,从池中发送到一个线程进行处理,然后处理到将数据包写入标准输出的输出线程。当您在C++中使用标准输入和输出时,建议在任何输入或输出之前调用std::ios_base::sync_with_stdio(false)功能。在某些环境中,这实现了很大的加速,但您应该避免在调用后使用标准C函数进行输入/输出。好吧,这似乎在单线程中工作得很好。但正如我所说,我的意图是使用一个线程用于输入,一个用于输出,多个线程用于并行处理。我观察到输出存在一些问题。这是输出线程(非常简化):voidPacke