在阅读TextMate的源代码时,我遇到a line of code让我感到困惑:
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