- The string class defines a char*-to-string conversion function, which allows a C-style string to be used to initialize a string object.
- One of the parameters of a parameter of type const reference indicates that: Assuming that the argument type of the argument does not match the reference parameter, but can be converted to a reference type, the program creates a temporary variable of the correct type, initializes it with the converted argument value, and passes a reference to the temporary variable.
From the above two properties we know: If the formal parameter type is const string &, when the function is called, the argument used can be a string object or a C-style string, such as a string literal enclosed in quotation marks, a char array ending with a null character, or a pointer variable pointing to char.
- The above refers to a property where the const reference is a formal parameter, that is, if the referenced parameter is const, the compiler generates temporary variables in some cases, such as the following two cases:
1, the argument type is incorrect, but can be converted to the correct type.
2, the argument type is correct, but not an lvalue.
- Let's look at the code example.
1#include <iostream>2#include <string>3 4 using namespacestd;5 6 stringVersionstring&a,Const string&b);7 8 intMainvoid)9 {Ten stringinput ="I Love you."; Onecout <<"Input Address:"<< &input <<Endl; A Const Char* B ="***"; -cout <<"I b Address:"<< &b <<Endl; - the version (input, b); - - return 0; - } + - stringVersionstring&a,Const string&b) + { A using namespacestd; atcout <<"a address:"<< &a <<Endl; -cout <<"Address B:"<< &b <<Endl; - returnA//without this, a memory error is generated. Returns a reference. - } - /************************************ - * Input address:0x7ffe09a647f0 in * I b address:0x7ffe09a647e8 - * a address:0x7ffe09a647f0 to * b address:0x7ffe09a64840 + * **********************************/
where input is a string object, the string class is applied to define a char*-to-string conversion function that converts the string literal to a string object. B is the char* type, and as an argument the function creates a temporary variable. Looking at the code, the address of B in main is:I b address:0x7ffe09a647e8 , and the address in version is:b address:0x7ffe09a64840 . They are different, stating that the function is not a reference to passing a char *b, but a temporary variable. Also see the string class input, in main and in version address is the same. The description is a reference that passed input.
Use a C-style string as a String object reference parameter