您可以从`volatile const char *`构造一个字符串吗? (不使用`const_cast`)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了您可以从`volatile const char *`构造一个字符串吗? (不使用`const_cast`)相关的知识,希望对你有一定的参考价值。
基本上我有volatile const char*
,并想创建一个string
。volatile
关键字在所有情况下都是无关紧要的(对先前开发人员的误解),但不能轻易摆脱(来自其他库)。
cannot convert argument N from 'volatile const char *' to 'std::string
我可以只使用const_cast
来丢弃volatile
(并使编译器不理会volatile
/ const
)。我对不使用const_cast
的解决方案感兴趣。
是否存在其他方法,例如可以使用stringstream
解决方案吗?
您可以使用STL算法std::transform()
对C字符串进行逐元素复制。
转换功能将有效地将每个volatile const char
转换为char
-无需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()
-如果没有大小,则需要编写自己的循环来计算它。
以上是关于您可以从`volatile const char *`构造一个字符串吗? (不使用`const_cast`)的主要内容,如果未能解决你的问题,请参考以下文章
为啥我可以从 char * const 值创建 char * 向量?
如何从 const char* 转换为 unsigned int c++
freeRTOS xTimerCreate从'char *'到'const signed char *'的无效转换[-fpermissive]