草庐IT

compilation-time

全部标签

c++ - 当我收到此错误 : <mutex> is not supported when compiling with/clr 时如何实现非托管线程安全集合

我有一个C++应用程序,它由非托管C++、托管C++和c#组成。在非托管部分,我尝试使用std::mutex创建线程安全集合。但是,当我使用互斥体时,出现以下错误;errorC1189:#error:isnotsupportedwhencompilingwith/clror/clr:pure.知道为什么我不能使用互斥锁吗?有人可以推荐一个替代品,以便我可以创建一个线程安全的非托管集合吗? 最佳答案 不支持,因为std::mutex实现使用GetCurrentThreadId()。这是一个不应该在托管代码中使用的winapi函数,因为

C++ STL 映射 : is access time O(1)?

是否在std::mapO(1)上查找键?我以为是,直到我想得更多。它基于树实现,所以查找时间应该是O(logN),对吗?而且,是否有可能在字符串键std::unordered_map上查找O(1)? 最佳答案 查找std::map的复杂性是O(logN)(容器大小的对数)。根据std::map::operator[]:上C++11标准的第23.4.4.3/4段Complexity:logarithmic.查找std::unordered_map的复杂性在平均情况下为O(1)(常数),在最坏情况下为O(N)(线性)。根据std::un

c++ - 浮点提升 : stroustrup vs compiler - who is right?

在Stroustrup的新书“C++编程语言-第四版”的第10.5.1节中,他说,在执行算术运算之前,整数提升用于从较短的整数类型创建整数,类似地,浮点-点提升用于从float中创建double。我使用以下代码确认了第一个声明:#include#includeintmain(){shorta;shortb;std::cout用vc++输出“int”,用gcc输出“i”。但是用float而不是短裤测试它,输出仍然是“float”或“f”:#include#includeintmain(){floata;floatb;std::cout根据Stroustrup的说法,浮点提升规则没有异常(

c++ - 如何将包含时间的字符串变量转换为 c++ 中的 time_t 类型?

我有一个字符串变量,其中包含hh:mm:ss格式的时间。如何将其转换为time_t类型?例如:字符串time_details="16:35:12"另外,如何比较两个包含时间的变量,以确定哪个是最早的?例如:字符串curr_time="18:35:21"字符串user_time="22:45:31" 最佳答案 使用C++11,您现在可以做到structstd::tmtm;std::istringstreamss("16:35:12");ss>>std::get_time(&tm,"%H:%M:%S");//orjust%Tinthis

c++ - 如何处理clang中的 "exit-time destructor"警告?

在我的C++11代码中,我在以下情况下收到clang警告“声明需要退出时析构函数”:staticconststd::mapmymap={{1,{"A","B","C"}},{2,{"D","E","F"}}};据我了解,Google需要一个“退出时析构函数”以确定性的方式销毁main()和静态变量,以防止由于“已发布的变量”而导致退出时崩溃。那正确吗?有人能解释得更好吗?另外:我能做些什么(我不想禁用警告)?上面的代码只在一个线程的上下文中使用。看起来这就是Chromium处理这些情况的方式;这也是我的情况的正确方法吗?#defineCR_DEFINE_STATIC_LOCAL(typ

c++ - 我可以使用 Visual Studio 201 0's C++ compiler with Visual Studio 2008' s C++ 运行时库吗?

我有一个应用程序需要在Windows2000上运行。我也想使用VisualStudio2010(主要是因为auto关键字的定义发生了变化)。但是,我有点束手无策,因为我需要该应用程序能够在较旧的操作系统上运行,即:Windows2000WindowsXPRTMWindowsXPSP1VisualStudio2010的运行时库依赖于WindowsXPSP2中引入的EncodePointer/DecodePointerAPI。如果可以使用备用运行时库,是否会破坏依赖于VS2010中添加的C++0x功能的代码,例如std::regex? 最佳答案

c - C中字符串文字的"Life-time"

难道后面函数返回的指针是不可访问的吗?char*foo(intrc){switch(rc){case1:return("one");case2:return("two");default:return("whatever");}}所以C/C++中局部变量的生命周期实际上只在函数内,对吗?这意味着,在char*foo(int)终止之后,它返回的指针不再意味着什么,对吧?我对局部变量的生命周期有点困惑。什么是好的说明? 最佳答案 是的,局部变量的生命周期在创建它的范围内({,})。局部变量具有自动或本地存储。自动,因为一旦创建它们的范围

c++ - 如何将 boost::posix_time::ptime 转换为 time_t?

是否有一些“标准”方法或者我能做的最好的方法是直接通过从gregorian::date(1970,1,1)中减去来计算它? 最佳答案 由于@icecrime的方法转换了两次(ptime在内部使用线性表示),我决定改用直接计算。这里是:time_tto_time_t(boost::posix_time::ptimet){usingnamespaceboost::posix_time;ptimeepoch(boost::gregorian::date(1970,1,1));time_duration::sec_typex=(t-epoc

c++ - 从 C++ 中的 std::chrono::time_point 中提取年/月/日等

如何从std::chrono::time_point对象中提取年、月、日、小时、分钟、秒和毫秒?我只看到了有关如何提取例如总量的示例。duration的秒数。 最佳答案 您只能从system_clock::time_point中提取此信息。这是系统提供的唯一与民用日历相关的时钟。以下是使用此时钟获取当前时间点的方法:system_clock::time_pointnow=system_clock::now();然后您可以使用以下命令将其转换为time_t:time_ttt=system_clock::to_time_t(now);然

c++ - C/C++ : How to use the do-while(0); construct without compiler warnings like C4127?

我经常在我的#defines中使用do-while(0)结构,原因描述为inthisanswer。.此外,我正在尝试使用编译器的尽可能高的警告级别来捕捉更多潜在问题,并使我的代码更加健壮和跨平台。所以我通常将-Wall与gcc和/Wall与MSVC一起使用。不幸的是,MSVC提示do-while(0)构造:foo.c(36):warningC4127:conditionalexpressionisconstant我应该怎么处理这个警告?只是对所有文件全局禁用它?对我来说这似乎不是一个好主意。 最佳答案 总结:在这种特殊情况下,此警告