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

c -cli – C/C++LI,对跟踪句柄的“常量”引用

发布时间:2020-12-16 10:16:53 所属栏目:百科 来源:网络整理
导读:我在代码中发现了类似的东西: void foo(IListint^ const list ) { ... } 这个^ const意思?我查看了C/C++LI规范,但没有找到关于制作常量跟踪引用的评论,也没有发现^组合. 这合法吗? 解决方法 它是跟踪句柄不变的参考. 它允许您通过引用而不是值传递句柄.据
我在代码中发现了类似的东西:

void foo(IList<int>^ const & list ) { ... }

这个^ const&意思?我查看了C/C++LI规范,但没有找到关于制作常量跟踪引用的评论,也没有发现^&组合.

这合法吗?

解决方法

它是跟踪句柄不变的参考.

它允许您通过引用而不是值传递句柄.据推测,作者认为它比复制手柄更有效.

如果作者想要使句柄保持不变,他应该使用其中任何一个

Method(TestClass const ^ const & parameter) 
Method(TestClass const^ parameter)

或者
方法(TestClass const ^&参数) – 但调用者必须首先构造句柄

TestClass const ^ constHandle = nonConstHandle

每个例子:

// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

ref class TestClass
{

public:

    void setA(int value)
    {
        a = value;
    }



    TestClass() : 
        a(10)
    {
    }

private:    

    int a;
};

class TakesHandle
{
public:

    void methodX1(TestClass const ^ const & parameter)
    {
    // Un-commenting below causes compiler error
    // parameter->setA(11);
    }

    void methodX2(TestClass const^ parameter)
    {
    // Un-commenting below causes compiler error
    // parameter->setA(11);
    }

    void methodX3(TestClass const^& parameter)
    {
    // Un-commenting below causes compiler error
    // parameter->setA(11);
    }

};


int _tmain(int argc,_TCHAR* argv[])
{
    TakesHandle takes;

    TestClass ^ test1 = gcnew TestClass();

    // compiles
    takes.methodX1(test1);

    // compiles
    takes.methodX2(test1);

    TestClass const ^ constHandle = test1;
    takes.methodX3(constHandle);

    return 0;
}

(编辑:李大同)

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

    推荐文章
      热点阅读