草庐IT

c++ - 为什么 set::find 不是模板?

使用来自的模板函数你可以这样做structfoo{intbar,baz;};structbar_less{//comparefoowithfoobooloperator()(constfoo&lh,constfoo&rh)const{returnlh.bar//comparesomeTwithfoobooloperator()(Tlh,constfoo&rh)const{returnlh//comparefoowithsomeTbooloperator()(constfoo&lh,Trh)const{returnlh.barbaz;}在std::set类似find的方法你必须传递一个s

c++ - std::move 内部 move 赋值运算符

我读入了anotherquestion在实现move构造函数时,最好对初始化列表中的每个成员进行std::move,因为如果该成员恰好是另一个对象,那么将调用该对象的move构造函数。像这样...//MoveconstructorCar::Car(Car&&obj):prBufferLength(std::move(obj.prBufferLength)),prBuffer(std::move(obj.prBuffer)){obj.prBuffer=nullptr;obj.prBufferLength=0;}然而,在我见过的所有示例move赋值运算符中,都没有提到使用std::move

c++ - Visual C++ 2010 拒绝在调试时显示 std::string 值。显示 <Bad Ptr>

我有一种奇怪的感觉,好像这是最近才出现的问题,并且发生在两台不同的计算机上。当我调试并尝试查看来自STL的std::string的值时,它显示为值。它说它的大小是15,容量是一些乱码。数组值本身都显示CXX0030:错误:无法计算表达式。这非常令人沮丧,如果我在字符串上调用c_str并将其分配给char*或在需要时使用监视表达式,我仍然可以在调试时访问字符串值,但它非常乏味并且让生活变得非常艰难连续3天调试复杂问题。其他STL容器的内容显示得很好。这发生在两台不同计算机上的多个项目上,我很确定我已经为该项目设置了所有调试选项。没有优化,肯定会生成调试信息。

c++ - 模板和常量字符串

我有一个我想要模板化的函数,目前我有两个不同版本的std::string和std::wstring。函数(精简)是这样的templatestd::vectorTokenizeArgs(constT&in){constTtofind=T("\"'");..dostuff..}T是std::string或std::wstring而_Tc是char或wchar_t。我在获取我定义的常量字符串以在模板版本中工作时遇到问题。上面的代码适用于std::string但不适用于std::wstring因为std::wstring没有构造函数,它需要一个char*数组。通常要解决此问题,我会将常量字符串

c++ - 在 VS2012 中使用 C++11 条件变量

我无法让代码在一个简单的VS2012控制台应用程序中可靠地工作,该应用程序由使用C++11条件变量的生产者和消费者组成。我的目标是生成一个可靠的小程序(用作更复杂程序的基础),该程序使用3个参数wait_for方法,或者可能是我在这些网站上收集的代码中的wait_until方法:condition_variable:wait_for,wait_until我想将3个参数wait_for与如下所示的谓词一起使用,除非它需要使用类成员变量以便稍后对我最有用。运行大约一分钟后,我收到“访问冲突写入位置0x__”或“将无效参数传递给服务或函数”作为错误。steady_clock和第二个参数wai

c++ - boost::ref 没有发生匹配调用错误,但 std::ref 没有

我已经编写了一些代码,使用仿函数和boost::中的ref和bind模板计算vector元素的数量>或std::(对于C++11)命名空间。我正在使用#define在boost::和std::命名空间之间切换。我使用的是boost版本1.53,我的编译命令是g++test.cpp-std=c++11。我已经尝试使用gcc版本4.7.2和4.6.3,但我在这两个版本上都遇到了同样的错误。我有3个问题:我不明白为示例2生成的错误。是否可以仅通过切换命名空间来使这样的代码具有可移植性?是否有很好的引用资料详细描述了bind的std和boost版本之间的差异,ref和功能?(我看到了this问

c++ - std::fstream 应该如何工作?

我刚刚开始想知道-std::fstream实际上是如何用std::ios::in和std::ios打开的::out实际上应该工作?它应该做什么?写一些东西到(例如)一个空文件,然后读取......什么?只是书面值(value)?文件“指针”/“光标”在哪里?也许答案已经在那里,但我就是找不到。 最佳答案 什么是std::fstream?std::fstream是双向文件流类。也就是说,它为文件的输入和输出提供了一个接口(interface)。当用户需要读取和写入相同的外部序列时,通常会使用它。当实例化双向文件流时(不同于std::o

c++ - 为什么 std::timed_mutex::try_lock_for 不起作用?

我在Ubuntu12.04中使用gcc-4.8.1(configure:./configure--prefix=/usr/local)编译了以下代码,但是当我运行它时,它没有工作。它没有停下来等待互斥量。它返回false,并输出“Helloworld!”命令:g++-std=c++11main.cpp-omain-pthread当我用gcc-4.6(apt-getinstallg++)编译时,效果很好。程序等了大概十秒,输出了“Helloworld!”#include#include#include#includestd::timed_mutextest_mutex;voidf(){t

c++ - 为什么在声明 std::set 时需要重复排序子例程?

在我的C++程序中,我试图按值而不是键对我的map进行排序。来自thisquestion,很明显,这样做的方法是创建一个集合,其元素是成对的,并且由我自己的小于函数排序。这是我尝试执行此操作的一些示例代码:#include#include#include#includeusingnamespacestd;boolcompareCounts(constpair&lhs,constpair&rhs);intmain(intargc,char*argv[]){mapcounter={{"A",1},{"B",2},{"C",3}};set,decltype(compareCounts)*>s

c++ - std::string 和 UTF-8 编码的 unicode

如果我理解的很好,可以同时使用string和wstring来存储UTF-8文本。对于char,ASCII字符占用一个字节,一些中文字符占用3或4个字节,等等。这意味着str[3]不一定指向第4个字符。与wchar_t相同,但每个字符使用的最小字节数始终为2(而不是char的1),以及3或4字节宽的字符将占用2个wchar_t。对吗?那么,如果我想对这样一个奇怪编码的字符串使用string::find_first_of()或string::compare()等怎么办?它会工作吗?字符串类是否处理字符具有可变大小的事实?或者我应该只将它们用作虚拟的无特征字节数组,在这种情况下我宁愿选择wc