gpt4 book ai didi

c++ - 你能从 `volatile const char*` 构造一个字符串吗? (不使用 `const_cast` )

转载 作者:行者123 更新时间:2023-12-01 14:49:43 24 4
gpt4 key购买 nike

基本上我有 volatile const char*并想创建一个 string .volatile这里的关键字很可能无关紧要(以前开发人员的误解),但不能轻易摆脱它(来自其他库)。

cannot convert argument N from 'volatile const char *' to 'std::string

我可以只使用 const_castvolatile离开(并使编译器忽略 volatile/ const )。我对不使用 const_cast 的解决方案感兴趣.

是否存在其他方法,例如。可以使用 stringstream也许是一个解决方案?

最佳答案

您可以使用 STL 算法 std::transform()对 C 字符串进行逐元素复制。

变换函数将有效地转换每个 volatile const charchar -- 无需 const_cast 即可工作的转换.使用 std::back_inserter() ,您可以将结果字符附加到 std::string 的末尾.

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
volatile const char* cstr = "hello";
std::size_t len = 6; // your string's length

// this implicitly converts 'volatile const char' argument to 'char' parameter
auto func = [] (char c) { return c; };
std::string str;
std::transform(cstr, cstr + len, std::back_inserter(str), func);

std::cout << "string=" << str << ".\n"; // outputs: string=hello.
}

请注意,您不能使用 std::strlen()出于同样的原因——如果您没有大小,则需要编写自己的循环来计算它。

关于c++ - 你能从 `volatile const char*` 构造一个字符串吗? (不使用 `const_cast` ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58797371/

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