草庐IT

start_point

全部标签

c++ - SBRM/RAII 用于 std::va_list/va_start()/va_end 使用

我的代码包含如下片段:std::va_listap;va_start(ap,msgfmt);snprintf_bufbuf;consttchar*msg=buf.print_va_list(msgfmt,ap);va_end(ap);它们很短,va_start()和va_end()靠得很近,所以它们不是什么大问题。两者之间的调用异常可能是一个问题(或不是?)。简单测试表明,不允许从没有省略号的函数中调用va_start()。从与va_start()不同的函数调用va_end()是否允许?基本上,我很好奇是否可以对这些调用使用SBRM/RAII习惯用法,即使必须手动调用va_start(

c++ - SSE 和 iostream : wrong output for floating point types

测试.cpp:#includeusingnamespacestd;intmain(){doublepi=3.14;cout当使用g++-mno-ssetest.cpp在cygwin64位上编译时,输出为:pi:0但是,如果使用g++test.cpp编译,它可以正常工作。.我有GCC版本5.4.0。 最佳答案 是的,我复制了这个。嗯,主要是。我实际上没有得到0的输出,而是一些其他的垃圾输出。所以我可以重现无效的行为,并且我已经查明了原因。您可以看到GCC5.4.0使用-m64-mno-sse标志hereonGoldbolt'sComp

c++ - 删除指向不完整类型的指针 'Point' ;没有调用析构函数

我有2个文件:Point.h:classPoint{intx;inty;char*name;public:Point(){name=newchar[5];}~Point(){delete[]name;}};和:Line.h:classPoint;classLine{Point*p;public:Line(){p=newPoint[2];.......}~Line(){delete[]p;}};但是当我编译时,我得到了下一个错误:deletionofpointertoincompletetype'Point';nodestructorcalled感谢任何帮助!

c++ - 对象成员的迭代器 "pointing"

我承认我很难对此做出合理的描述。我想不出一个好词来准确描述我正在寻找的东西。也许这可以称为切片迭代器。假设我有这样的东西:structS{inti;char*s;floatf;};std::vectorv(10);我正在寻找一种构造迭代器的方法,它将指向S的成员。我希望能够将它传递给std::min_element之类的东西,而无需在每种情况下都创建谓词。可能看起来像这样的东西:std::min_element(slicing_iterator(v.begin(),S::f),slicing_iterator(v.end(),S::f));我可以使用任何模板技巧来实现这一目标吗?或者它

c++ - std::chrono:将自定义持续时间添加到 time_point

以下代码可以编译(g++4.7.2):#includetypedefstd::chrono::durationdouble_prec_seconds;typedefstd::chrono::time_pointtimepoint_t;voiddo_something(consttimepoint_t&tm){//...}intmain(intargc,char**argv){timepoint_tt0=std::chrono::system_clock::now();timepoint_tt1=t0+std::chrono::seconds(3);//timepoint_tt3=t0+

c++ - "QObject::startTimer: timers cannot be started from another thread"没有计时器 && CPU 消耗

我在Qt(4.7.2)中创建了一个多线程应用程序。只有主线程有事件循环。问题是有时我在控制台中收到以下警告:QObject::startTimer:timerscannotbestartedfromanotherthread发生这种情况后,应用程序会消耗100%的CPU(我有一个单核CPU)。看起来,主线程消耗了所有的CPU资源。该程序不会卡住,一切仍然有效。当我在调试器中停止程序时,我没有在调用堆栈中看到我的代码。问题是我根本没有使用(明确地,无论如何)计时器。它可以连接什么?我知道,这个问题很常见,但我什至不明白要显示哪一段代码。 最佳答案

c++ - 如何将分数纪元时间戳( double )转换为 std::chrono::time_point?

我有一个小数纪元时间戳,表示为double,我想将其转换为适当的std::chrono::time_point。纪元是自1/1/1970以来的常用UNIX纪元。我知道存在std::chrono::system_clock::from_time_t,但是time_t没有小数部分。使用C++11方法执行此操作的最佳方法是什么?这个问题与unixtimestamptoboost::posix_time::ptime有关,除了它要求的是C++11而不是它的Boost版本。 最佳答案 假设纪元与已知的时钟类型相同,您可以使用具有double表

c++ - 将 steady_clock::time_point 转换为 time_t

我正在使用steady_clock来保存一些消息的时间戳。出于调试目的,拥有日历(或类似的东西)很有用。对于其他时钟,有静态函数to_time_t,但在GCC(MinGW4.8.0)上,此函数不存在。现在我打印类似的东西:Timestamp:26735259098242对于时间戳,我需要一个steady_clock,所以我不能使用system_clock或其他。编辑之前的打印是从time_since_epoch().count()给出的 最佳答案 假设您需要内部计算的稳定行为,而不是显示,这里有一个函数可用于转换为time_t以供显

C++ 11 正则表达式 : checking if string starts with regex

我正在使用C++11的支持,并想检查字符串的开头是否与正则表达式匹配。[如果有帮助,我可以切换到Boost,但我的印象是它们基本相同。]显然,如果我可以控制表达式的实际文本表示,我可以只粘贴^在它的开头作为anchor。但是,如果我只有一个regex怎么办?(或basic_regex)对象?我可以修改它代表的正则表达式来添加anchor吗?或者我必须使用regex_search,得到结果,检查是否从位置0开始? 最佳答案 您可以在使用regex_search时添加std::regex_constants::match_continu

c++ - 获取 POSIX 纪元作为 system_clock::time_point

我知道std::chrono::system_clock::time_point的默认值是时钟的纪元,但我在C++11标准中找不到任何规定system_clock的纪元与POSIX纪元(1970-01-01T00:00:00Z)相同。在Linux和Windows上假设是这种情况是否安全?或者使用std::chrono::system_clock::from_time_t(0)会更聪明吗? 最佳答案 标准离开std::chrono::system_clock::time_point的纪元未指定。std::chrono::system_