C ++ Literal字符串和const字符串引用参数

时间:2015-06-23 00:06:24

标签: c++

我有两个带有const std :: string& amp;的重载函数和布尔分别。我现在用文字字符串调用该函数。 bool版本被调用。这有点奇怪,这确实是一个陷阱。

任何人都可以解释原因吗?

请参阅下面的代码。输出是

Write == 1
#include <iostream>
#include <string>

void write(const std::string& name_) {
  std::cout << "Write == " << name_ << std::endl;
}

void write(bool name_) {
  std::cout << "Write == " << name_ << std::endl;
}

int main()
{
  write("data");
}

1 个答案:

答案 0 :(得分:3)

问题是你写的参数是不是类型为std :: string的值(它不是std :: string的文字)而是字符数组。

不幸的是,我同意你的观点,这是一个陷阱,重载决策的规则将选择将数组转换为布尔值,转换为const引用为字符串。

请注意,在C ++ 11中有实际的std::string文字,我不会在这里详细介绍。

重载是什么修复了显式转换为std :: string:

的问题

write(std::string("data"))会做正确的事。

将来防止此问题。这确实是一个陷阱。

相关问题