当前位置: 首页 > 知识库问答 >
问题:

const字符串有什么区别

裴成文
2023-03-14

这是c primer中的代码

string::size_type findChar(const string &s, char c, string::size_type & occurs){
    auto ret = s.size();
    occurs = 0;
    for (decltype(ret) i = 0; i != s.size(); ++i){
        if (s[i] == c){
            if (ret == s.size())
                ret = i;
            occurs++;
        }
    }
    return ret;
}

int main () {
    string::size_type ctr;
    cout << findChar("hello, world!", 'o', ctr);
}

常量字符串中删除const后发生错误

错误:无法绑定“std::__cxx11::string”类型的非常数左值引用

我想知道,在这种情况下,const关键字会改变编译器的哪些行为?谢谢你帮助我。


共有3个答案

子车飞文
2023-03-14

在调用代码中,s传递的对象“你好,世界!” ,这是一个其内容无法更改的字符串。在函数findChar中,输入常量字符串

但是,参数<code>字符串

阳兴文
2023-03-14

std::string 是一个类。const char* 是指向内存的指针,希望包含一个以 null 结尾的字符串。您可以使用 std::string 按值传递并创建副本,而无需调用 strcpy 等函数。

尽可能使用 std::string,当您需要指向字符串的指针时,请使用 c_str() 方法,例如,对于较旧的 C 库。

冀阳文
2023-03-14

“hello, world!”这样的字符串文字不是 std::string。因此,要调用函数,编译器必须为您创建一个std::string。这样的对象称为临时对象。因此,在第一种情况下,编译器使用“hello, world!”来创建一个 std::string,然后将该临时字符串绑定到引用参数 s

但是C有一条规则,不能将临时引用绑定到非const引用。但是当您将sconst更改为d::字符串

如果您将代码更改为 this

string::size_type ctr;
string hello = "hello, world!";
cout << findChar(hello, 'o', ctr);

它现在将编译,即使没有const。这里的区别在于编译器不再创建临时的std::string(因为hello已经是std::string)。因此,关于临时引用和非 const 引用的规则不适用。

 类似资料:
  • 问题内容: 我正在使用一个返回字节字符串的库,我需要将其转换为字符串。 尽管我不确定有什么区别-如果有的话。 问题答案: 假设使用Python 3(在Python 2中,这种区别的定义不太明确)-字符串是字符序列,即unicode码点;这些是一个抽象概念,不能直接存储在磁盘上。毫无疑问,字节字符串是字节的序列- 可以 存储在磁盘上的东西。它们之间的映射是一种 编码 -其中有很多(并且无限可能)-并

  • 问题内容: 在学习电子时,我发现了两种获取BrowserWindow对象的方法。 和 和之间有什么区别? 我不明白为什么可以使用。我是否想念有关JS的重要信息? 问题答案: 这两段代码是等效的,但是第一段代码使用的ES6分解分配要短一些。 这是一个如何工作的简单示例:

  • 我最近读到了关键字,我很困惑!我找不到和关键字之间的任何区别,我的意思是我们可以使用它们来创建一个不可变的变量,还有什么我遗漏的吗?

  • 和之间有什么区别? 什么时候我只能使用其中一个

  • 下面这两种说法有什么区别?

  • 问题内容: 在PHP中,将解析包含在“双引号”中的字符串以替换变量,而不会解析包含在“单引号”中的字符串。在Python中,这是否也适用? 问题答案: 否: 2.4.1。字符串和字节文字 …用简单的英语:两种类型的文字都可以用匹配的单引号()或双引号()括起来。它们也可以包含在三个单引号或双引号的匹配组中(通常称为三引号字符串)。反斜杠()字符用于转义具有特殊含义的字符,例如换行符,反斜杠本身或引