Cpp_Primer_Answers
Cpp_Primer_Answers copied to clipboard
练习3.7 为什么我用你上传的代码把循环控制变量类型换成char,字符还是能被换成X
g++ -m64
g++ -m64
代码里面就是char啊, 难道我看错了
for (char x : s) { x = 'X'; }
如果写成
char &x : s
那就还会被换成X,把&
去掉就不会
如果将 auto 换成 char,代码将会出现编译错误。
在这段代码中,str 是一个 std::string 对象,auto 关键字用于自动推断迭代器的类型。在这种情况下,auto &c 推断为 char& 类型,因为 str 是一个字符串,其中的每个元素都是字符。
如果将 auto 替换为 char,则会将 c 声明为一个新的变量,而不是迭代器。然后,编译器会尝试将 char 类型的变量赋值给 char& 类型的元素,导致编译错误。
正确的代码应该保持 auto,以便正确地迭代字符串中的每个字符并进行修改。
我想你是使用了
char &c
而不是
char c
这个issue是2020的,但是希望能够帮助到其他人吧!