这是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
关键字会改变编译器的哪些行为?谢谢你帮助我。
std::string 是一个类。const char* 是指向内存的指针,希望包含一个以 null 结尾的字符串。您可以使用 std::string 按值传递并创建副本,而无需调用 strcpy 等函数。
尽可能使用 std::string,当您需要指向字符串的指针时,请使用 c_str() 方法,例如,对于较旧的 C 库。
像“hello, world!”
这样的字符串文字不是 std::string
。因此,要调用函数,编译器必须为您创建一个std::string
。这样的对象称为临时对象。因此,在第一种情况下,编译器使用“hello, world!”
来创建一个 std::string
,然后将该临时字符串绑定到引用参数 s
。
但是C有一条规则,不能将临时引用绑定到非const引用。但是当您将s
从const更改为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。字符串和字节文字 …用简单的英语:两种类型的文字都可以用匹配的单引号()或双引号()括起来。它们也可以包含在三个单引号或双引号的匹配组中(通常称为三引号字符串)。反斜杠()字符用于转义具有特殊含义的字符,例如换行符,反斜杠本身或引