(string&)string() 和 (string&)" 作为默认参数有什么区别?
What is the difference between (string&)string() and (string&)"" as a default parameter?
我声明了一个带有信息字符串作为默认参数的日志记录函数。
void LogError(ErrorEnum error, string& infoStr = (string&)"")
当在没有附加字符串的情况下调用函数时,我在尝试以这种方式写入日志流时会出现未经处理的异常:
ofstream mystream;
//do some stuff
mystream<< "Error " << infoStr << " failed!" << endl;
如果 ich 将默认参数更改为 (string&)string(),则不会再发生异常。使用 VS2013 进行调试表明,在这两种情况下,infoStr 的值都是 "。
那么这两个声明之间的区别在哪里?
在第一种情况下,您基本上是从char const (&) [1]
转换为string&
。这显然是站不住脚的。 std::string
是一个类,它不是单例字符数组,因此例外。在第二种情况下,您将临时从右值转换为右值。这是可疑的,但由于引用的值实际上是同一类型的,因此效果很好。
相关文章:
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- map<string, int> m= {}; 在C++中是什么意思?
- 将(临时的?)std::string传递给使用它来构造一个接受副本的对象的函数的最佳方法是什么?
- freq_table[field_pm_value] = map<string, int>(); 是什么意思?
- 方括号在"map <string, int> instance[numberFeatures];"中是什么意思
- 调整我的std :: string时,角色缓冲区会发生什么
- 'context string for the given token'是什么意思?
- 我们应该在带有 char *func(char *string) 的函数中返回什么?需要简要说明这与 c 中的 char
- "conversion from void to non scalar type string"是什么意思?
- 此错误的含义是什么:从 'char* [40] 转换为非标量类型 'std::string
- 我可以在 C 中使用什么而不是"string" C++
- 用一个字符制作 std::string 的最佳方法是什么?
- ::std::string 和 std::string 有什么区别
- 我的 C++11 测试表明 sort(vector<string>) 甚至比 C++03 慢,有什么错误吗?
- 如果我返回文字而不是声明的 std::string 会发生什么
- 解释"Bit String"的最佳方式是什么
- 仅威胁唯一字符串 - 什么是更快的 vector<std::string> 或只是 std::string
- 字符 * 和 const_cast<字符*>(string.c_str())有什么区别
- 有什么方法可以将std :: string :: iterator的值存储在C 中的char *中
- 在较旧的C 标准中,我可以使用什么代替std :: string :: pop_back