2

在阅读TextMate的源代码时,我遇到了一行让我感到困惑的代码:

match_t search (pattern_t const& ptrn, char const* first, char const* last, char const* from, char const* to, OnigOptionType options)
{
    if(ptrn)
    {
        struct helper_t { static void region_free (OnigRegion* r) { onig_region_free(r, 1); } };
        regexp::region_ptr region(onig_region_new(), &helper_t::region_free);
        if(ONIG_MISMATCH != onig_search(ptrn.get().get(), first, last, from ?: first, to ?: last, region.get(), options))
            return match_t(region, ptrn.get(), first);
    }
    return match_t();
}

?:运算符是什么意思?“from ?: first”是否等同于“from ? default(decltype(from)) : first”?

因为我使用的是 Windows 并且只是阅读代码,所以这对我来说真的是一个难题。我相信这是 C++ 代码,因为它是一个 *.cc 文件。(不应该是 Objective-C)

你可以在这里查看代码:https ://github.com/textmate/textmate/blob/master/Frameworks/regexp/src/regexp.cc#L115

4

0 回答 0