加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C模板,vector.size用于默认参数definitoin

发布时间:2020-12-16 10:21:20 所属栏目:百科 来源:网络整理
导读:有结构TA template typename Tstruct TA{ typedef std::vector T Type;}; 和test()函数具有类型TA的默认参数. template typename Tvoid test ( typename TAT::Type a1,typename TAT::Type a2 = typename TAT::Type(a1.size()) ){} 是否可以在默认参数a2定义
有结构TA

template <typename T>
struct TA
{
    typedef std::vector <T> Type;
};

和test()函数具有类型TA的默认参数.

template <typename T>
void test ( typename TA<T>::Type a1,typename TA<T>::Type a2 = typename TA<T>::Type(a1.size()) )
{}

是否可以在默认参数a2定义中使用a1.size()?

int main()
{
    TA <double> ::Type a1;
    test<double>(a1);
}

解决方法

Is it posssible to use a1.size() in default parameter a2 definition?

不可以.标准禁止这样做.您不能使用函数参数来设置其他参数的默认值.

§8.3.6/ 9(C 03)明确指出,

Default arguments are evaluated each
time the function is called. The order
of evaluation of function arguments is
unspecified
. Consequently,parameters
of a function shall not be used in
default argument expressions
,even if
they are not evaluated.

所以解决方案是:使用过载:

template <typename T>
void test(typename TAs<T>::Type a)
{
    test(a,typename TA<T>::Type(a.size()));
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读