我有一个需要在Windows 2000上运行的应用程序.我还想使用Visual Studio 2010(主要是因为auto关键字定义的更改).但是,我有点绑定,因为我需要应用程序能够在较旧的操作系统上运行,即:
Visual Studio 2010的运行时库依赖EncodePointer / DecodePointer于Windows XP SP2中引入的API.
如果可以使用备用运行时库,那么这会破坏依赖于VS2010中添加的C++ 0x功能的代码std::regex吗?
我知道通常标准对已经移动的值的要求很少:
N3485 17.6.5.15 [lib.types.movedfrom]/1:
可以从(12.8)移动C++标准库中定义的类型的对象.可以显式指定或隐式生成移动操作.除非另有规定,否则此类移动物体应置于有效但未指定的状态.
我找不到任何与vector此明确排除的内容.但是,我无法想出一个理智的实现,导致向量不为空.
是否有一些标准需要我缺少或者类似于在C++ 03中作为连续缓冲区处理basic_string?
我想将我正在处理的库打包为仅限标头的库,以便客户端更容易使用.(它很小,并且没有理由将它放入单独的翻译单元中)但是,我不能简单地将我的代码放在标题中,因为这违反了C++的一个定义规则.(假设库头包含在客户端项目的多个翻译单元中)
如何修改库以使其成为仅标题?
我知道在C++ 03中,从技术上讲,std::basic_string模板不需要具有连续的内存.但是,我很好奇有多少实现存在于实际利用这种自由的现代编译器.例如,如果想要用来basic_string接收某些C API的结果(如下面的例子),分配一个向量只是为了立即将它变成一个字符串似乎很愚蠢.
例:
DWORD valueLength = 0;
DWORD type;
LONG errorCheck = RegQueryValueExW(
hWin32,
value.c_str(),
NULL,
&type,
NULL,
&valueLength);
if (errorCheck != ERROR_SUCCESS)
WindowsApiException::Throw(errorCheck);
else if (valueLength == 0)
return std::wstring();
std::wstring buffer;
do
{
buffer.resize(valueLength/sizeof(wchar_t));
errorCheck = RegQueryValueExW(
hWin32,
value.c_str(),
NULL,
&type,
&buffer[0],
&valueLength);
} while (errorCheck == ERROR_MORE_DATA);
if (errorCheck != ERROR_SUCCESS)
WindowsApiException::Throw(errorCheck);
return buffer;
Run Code Online (Sandbox Code Playgroud)
我知道像这样的代码可能会略微降低可移植性,因为它意味着它std::wstring是连续的 - 但我想知道这个代码是多么不可移植.换句话说,编译器如何实际利用具有非连续内存的自由?
编辑:我更新了这个问题,提到C++ 03.读者应注意,在定位C++ 11时,标准现在要求basic_string是连续的,因此在定位该标准时,上述问题不是问题.
关于构成有效语言环境名称的内容,该标准几乎没有提及; 仅传递无效的区域设置名称导致std::runtime_error.哪些语言环境名称可用于常见的Windows编译器,如MSVC,MinGW和ICC?
restrict是一个C99功能,它最近得到了很多关注,允许编译器对指针执行"以前只有fortran"的优化.这也是微软最近宣布的与C++ AMP规范基础相同的关键词.
该关键字实际上是在FCD中吗?如果没有,是否有特定原因被省略?
令人讨厌的是必须单独维护.filters文件以使Visual Studio满意,以及我的项目的磁盘布局.有可能告诉VS使用真正的文件夹,就像它对C#一样吗?
我有一个方法从数据库中提取修改过的预序树横向树,并使用回调函数对其进行过滤.例如:
/**
* Recursive function for building the Cas_Template_TreeNode.
*
* @static
* @param array $rows
* @param callback $filter A function to filter the tree by (return a value convertible to false to remove the item from the tree)
* @return array
*/
private static function MakeTreeGivenDbRows($rows, $filter = null)
{
if ($filter === null)
{
$filter = function($unused)
{
return true;
};
}
$result = array();
$childrenCount = 0;
for ($idx = 0; $idx < count($rows); $idx += …Run Code Online (Sandbox Code Playgroud) 我正在尝试加速C++中的目录枚举,我正在递归到子目录.我目前有一个应用程序花费95%的时间在FindFirst/FindNextFile API中,并且需要几分钟来枚举给定卷上的所有文件.我知道有可能更快地做到这一点,因为有一个应用程序可以做到:一切.它可以在几秒钟内枚举我的整个驱动器.
我怎么能做到这样的事情?