小编Bil*_*eal的帖子

在C或C++中,我应该针对NULL/nullptr检查指针参数吗?

这个问题的灵感来自于这个答案.

我一直都认为当调用者做一些愚蠢的事情时,被调用者永远不会负责,比如传递无效参数.我得出这个结论有几个原因,但也许最重要的一个来自这篇文章:

未定义的所有内容都是未定义的.

如果一个函数没有在它的文档中说它有效通过nullptr,那么你最好不要传递nullptr给那个函数.我不认为被叫方有责任处理这类事情.

但是,我知道会有一些人不同意我的看法.我很好奇我是否应该检查这些东西,以及为什么.

c c++ null

37
推荐指数
5
解决办法
7291
查看次数

我可以在Visual Studio 2008的C++运行时库中使用Visual Studio 2010的C++编译器吗?

我有一个需要在Windows 2000上运行的应用程序.我还想使用Visual Studio 2010(主要是因为auto关键字定义的更改).但是,我有点绑定,因为我需要应用程序能够在较旧的操作系统上运行,即:

  • Windows 2000
  • Windows XP RTM
  • Windows XP SP1

Visual Studio 2010的运行时库依赖EncodePointer / DecodePointer于Windows XP SP2中引入的API.

如果可以使用备用运行时库,那么这会破坏依赖于VS2010中添加的C++ 0x功能的代码std::regex吗?

c++ visual-studio-2008 visual-studio

36
推荐指数
4
解决办法
2万
查看次数

移动的向量是否总是空的?

我知道通常标准对已经移动的值的要求很少:

N3485 17.6.5.15 [lib.types.movedfrom]/1:

可以从(12.8)移动C++标准库中定义的类型的对象.可以显式指定或隐式生成移动操作.除非另有规定,否则此类移动物体应置于有效但未指定的状态.

我找不到任何与vector此明确排除的内容.但是,我无法想出一个理智的实现,导致向量不为空.

是否有一些标准需要我缺少或者类似于在C++ 03中作为连续缓冲区处理basic_string

c++ vector language-lawyer move-semantics c++11

36
推荐指数
2
解决办法
6697
查看次数

如何创建仅限标题的库?

我想将我正在处理的库打包为仅限标头的库,以便客户端更容易使用.(它很小,并且没有理由将它放入单独的翻译单元中)但是,我不能简单地将我的代码放在标题中,因为这违反了C++的一个定义规则.(假设库头包含在客户端项目的多个翻译单元中)

如何修改库以使其成为仅标题?

c++ header-only

33
推荐指数
3
解决办法
9793
查看次数

在定位C++ 03时使用std :: basic_string <t>作为连续缓冲区是否合理?

我知道在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是连续的,因此在定位该标准时,上述问题不是问题.

c++ string winapi stl c++03

32
推荐指数
2
解决办法
3480
查看次数

常见的Windows编译器上有哪些std :: locale名称?

关于构成有效语言环境名称的内容,该标准几乎没有提及; 仅传递无效的区域设置名称导致std::runtime_error.哪些语言环境名称可用于常见的Windows编译器,如MSVC,MinGW和ICC?

c++ windows locale

30
推荐指数
3
解决办法
2万
查看次数

C++ 11是否添加了C99限制说明符?如果没有,为什么不呢?

restrict是一个C99功能,它最近得到了很多关注,允许编译器对指针执行"以前只有fortran"的优化.这也是微软最近宣布的与C++ AMP规范基础相同的关键词.

该关键字实际上是在FCD中吗?如果没有,是否有特定原因被省略?

c++ c++11 c++-amp

30
推荐指数
4
解决办法
6895
查看次数

我可以将Visual Studio配置为使用真实文件夹而不是C++项目中的过滤器吗?

令人讨厌的是必须单独维护.filters文件以使Visual Studio满意,以及我的项目的磁盘布局.有可能告诉VS使用真正的文件夹,就像它对C#一样吗?

c++ visual-studio-2010

29
推荐指数
1
解决办法
8203
查看次数

我应该如何PHPDoc回调?

我有一个方法从数据库中提取修改过的预序树横向树,并使用回调函数对其进行过滤.例如:

/**
 * 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)

php phpdoc

27
推荐指数
2
解决办法
5299
查看次数

如何快速枚举Win32上的目录?

我正在尝试加速C++中的目录枚举,我正在递归到子目录.我目前有一个应用程序花费95%的时间在FindFirst/FindNextFile API中,并且需要几分钟来枚举给定卷上的所有文件.我知道有可能更快地做到这一点,因为有一个应用程序可以做到:一切.它可以在几秒钟内枚举我的整个驱动器.

我怎么能做到这样的事情?

c++ winapi

26
推荐指数
4
解决办法
6357
查看次数