【问题标题】:How to convert between a std::string and an Aws::String?如何在 std::string 和 Aws::String 之间进行转换?
【发布时间】:2018-09-21 23:30:54
【问题描述】:

当尝试使用以下代码将 std::string 转换为 Aws::String 时:

std::string s("Johnny is cool");
Aws::String aws_s(s);

我收到以下错误:

error: no matching function for call to ‘std::__cxx11::basic_string<char, std::char_traits<char>, Aws::Allocator<char> >::basic_string(const string&)’

【问题讨论】:

    标签: c++ aws-sdk


    【解决方案1】:

    来自https://github.com/aws/aws-sdk-cpp/issues/416。谢谢Bu11etmagnet


    如果您想将 std::string 传递给 Aws 函数,请从中构造一个 Aws::String

    std::string s{"whatever"};
    Aws::String aws_s(s.c_str(), s.size());
    Aws::SomeFunction(aws_s);
    

    如果您从 Aws 函数中获得 Aws::String,请从中构造一个 std::string:

    Aws::String const& aws_s = Aws::SomeFunction();
    std::string s(aws_s.c_str(), aws_s.size());
    

    不幸的是,这两个都执行字符串内容的副本。

    Aws::String aws_s(std_string.c_str()) 将使用 strlen() 测量字符串长度,该信息已包含在 std::string 对象中。

    【讨论】:

    • 重点可能不是重新计算长度的效率低下,而是嵌入零的可能性。
    • 字符串 aws_s 是否会以 null 结尾?
    猜你喜欢
    • 2016-03-09
    • 2020-06-06
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多