【发布时间】:2015-03-21 03:28:46
【问题描述】:
我有以下代码。
void print_pair(const std::pair<const std::string&, const int&>& p)
{
std::cout << p.first << "," << p.second << std::endl;
}
print_pair(std::pair<const std::string&, const int&>("test",1));//1
print_pair(std::pair<const std::string&, const int&>(std::string("test"),1));//2
产生以下输出:
,1
test,1
这两行不应该产生相同的输出吗,因为在第一种情况下,应该隐式调用 char* 中的字符串的构造函数?为什么 const 引用在第一种情况下似乎没有延长第一对参数的寿命?
使用 gcc4.9 -std=c++11 -O3 编译。
【问题讨论】:
-
尝试从
std::string中删除&... -
@zenith:你已经在 C++03 模式下构建,构造函数的最佳匹配是
std::pair<std::string const&, int const&>(std::string const &, int const &)。在 C++11 之前,临时字符串将由调用者创建,并且会比函数调用更有效。如果您在 C++11 或 C++14 模式下重新运行该代码,您将获得未定义的行为。
标签: c++