c/c++语言开发共享如何在C或C ++中进行字符串实习?

有没有像C或C ++中的intern()方法,就像在Java中一样? 如果没有,我怎样才能在C或C ++中进行字符串实习 ?

    boost::flyweight< std::string >似乎正是你正在寻找的。

    在C中是否有像C中的intern()方法一样的东西?

    不在标准C库中。

    如果没有,如何在C中进行字符串实习?

    我很害怕,很困难。 第一个问题是“字符串”在C中不是一个明确定义的东西。相反,你有char * ,它可能指向一个以零结尾的字符串,或者可能只是表示一个字符位置。 然后你就会遇到一些问题,即某些字符串嵌入到其他东西中……或存储在堆栈中。 这两者都使得实习变得不可能和/或无意义。 然后,存在这样的问题:C字符串文字不能保证被实现…以Java保证的方式。 最后,还有一个问题就是实习是等待发生的存储泄漏……如果语言不是垃圾收集的话。

    话虽如此,(尝试)在C中实现实习的方法是创建一个哈希表来保存实习字符串。 除非它是文本或在其自己的堆节点中分配的字符串,否则您需要使它成为一个不能实习字符串的前提条件。 要解决存储泄漏问题,您需要一个每字符串引用计数来检测何时可以丢弃一个内部字符串。

    字符串实习在具有价值语义的语言中意味着什么? Interning是一种强制对象标识的机制,用于引用具有值标识的字符串。 它与使用引用语义并使用对象标识作为默认比较函数的语言相关。 默认情况下,C ++使用值语义,而像std::string这样的类型没有标识,因此实习没有意义。

    一些实现(例如g ++)可以在幕后使用一种forms的字符串数据的引用语义。 作为扩展,这样的实现可以提供某种类型的数据实习。 (据我所知,G ++没有,但会自动“实习”空字符串。)

    大多数其他实现甚至不在内部使用引用语义。 你会如何使用小字符串优化(如MS)实施实现? 在某些情况下,数据实际上在类中,并且没有动态分配的内存。

    需要了解更多c/c++开发分享如何在C或C ++中进行字符串实习?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享如何在C或C ++中进行字符串实习?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/978952.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐