gpt4 book ai didi

c++ - cv::String 和 std::string:何时使用哪一个以及同时使用两者的必要性?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:33 33 4
gpt4 key购买 nike

在 OpenCV 项目中,通常 cv::String 用于函数,例如一个简单的 putText。但是,当使用 std 的函数时,std::string 是负责的。例如。在这种情况下

ifstream stream(filepath);
string line;
getline(stream, line, '\n');

std::string 是必需的,因为 cv::String 会抛出错误。在反之亦然的情况下,使用 OpenCV 函数 std::string 被正确转换为 cv::String 并且以下代码有效:

string Str = "Test";
putText(img, Str, Point(10, 10), FONT_HERSHEY_PLAIN, 1, Scalar::all(255), 1);

问题

为什么 OpenCV 有自己的字符串类?我认为可能存在一些对 OpenCV 有用的差异,而 std::string 的所有(或大部分?)功能对于 cv::String 仍然是可能的。但似乎 std::string 可以转换为 cv::String(我至少针对 putText 进行了测试。

文档显示了类似的功能,但也有一些差异,例如相关功能 static bool operator> (const String &lhs, const String &rhs) 和类似的:

http://docs.opencv.org/3.1.0/d1/d8f/classcv_1_1String.html对于 cv::String http://www.cplusplus.com/reference/string/string/对于 std::string

我错过了什么吗?

为什么我应该在一个项目中使用两个版本的字符串,或者为了更好的可读性只使用 std::string 是否可以接受? (只要不使用例如前面提到的相关功能)

编辑:这个问题here解决了 QString 和字符串的类似问题,建议尽可能使用 std::string。我想知道这是否也适用于 OpenCV。

最佳答案

为什么 OpenCV 有自己的字符串类? OpenCV 是一个相当古老的库(2000 年 6 月首次发布)。那时,标准库不太可靠,OpenCV 团队可能决定他们宁愿编写自己的库。几年前,MFC 团队做出了同样的决定,Qt 团队和 wxWidgets 团队也是如此。 “字符串”类的激增正是标准委员会定义 std::string 的原因 - 但为时已晚。

如果您可以在整个项目中只使用一个字符串类,那就去做吧。通常你不能;例如, 给定一个返回 cv::String 的函数,不会自动转换为 std::string给定一个函数,它通过非常量引用获取 cv::String,您需要传递一个实际的 cv::String 对象。 (编辑:Jonas 指出cv::Stringstd::string 的自动转换。)

另请注意,您对 putString 的调用实际上可能使用 cv::String - 它是通过 std::string 隐式构造的转换构造函数。如果(且仅当)您有性能热点,那些不必要的转换可能会成为问题。

关于c++ - cv::String 和 std::string:何时使用哪一个以及同时使用两者的必要性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45856079/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com