您可以从`volatile const char *`构造一个字符串吗? (不使用`const_cast`)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了您可以从`volatile const char *`构造一个字符串吗? (不使用`const_cast`)相关的知识,希望对你有一定的参考价值。

基本上我有volatile const char*,并想创建一个stringvolatile关键字在所有情况下都是无关紧要的(对先前开发人员的误解),但不能轻易摆脱(来自其他库)。

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`)的主要内容,如果未能解决你的问题,请参考以下文章

volatile与const综合分析

为啥我可以从 char * const 值创建 char * 向量?

const与volatile

如何从 const char* 转换为 unsigned int c++

freeRTOS xTimerCreate从'char *'到'const signed char *'的无效转换[-fpermissive]

volatile const int ci = 100;这是啥意思?