c ++模板中百分号(%)和锐符号(#)的含义是什么?

cet*_*ron 0 c++ templates

这是来自MS VC stl的代码:

 template<typename _Fun_t,
    typename _Arg_t> inline
    binder1st<_Fun_t> bind1st(_Fun_t% _Func, _Arg_t _Left)
    {   // return a binder1st functor adapter
    typename _Fun_t::first_argument_type _Val = _Left;

    return (binder1st<_Fun_t>(_Func, _Val));
    }
Run Code Online (Sandbox Code Playgroud)

和QT:

 #define Q_ARG(type, data) QArgument<type >(#type, data)
Run Code Online (Sandbox Code Playgroud)

Tom*_*Tom 5

这些都不是特定于模板的.

'%'是C++的Microsoft扩展,是C++/CLI的一部分.它定义了跟踪参考.类型的正常左值引用变量T&是对另一个变量的引用; 所以T%除了它指的是可能被垃圾收集器移动的托管对象; GC知道当它移动对象时,它必须修补对该对象的所有跟踪引用.

'#'是C预处理器的stringify运算符.它表示以下宏参数的值,由双引号括起.所以这:

Q_ARG(MyType, 12345)
Run Code Online (Sandbox Code Playgroud)

将扩展到这个:

QArgument<MyType >("MyType", 12345);
Run Code Online (Sandbox Code Playgroud)