使用临时实例初始化对象

时间:2011-12-28 21:40:17

标签: c++

// have compilation errors
class TestClass
{
public:
  TestClass(std::string& str) {}

};

int main() {
  TestClass tc(std::string("h"));
  return 0;
}


p166.cpp: In function ‘int main()’:
p166.cpp:29:32: error: no matching function for call to ‘TestClass::TestClass(std::string)’
p166.cpp:25:3: note: candidates are: TestClass::TestClass(std::string&)
p166.cpp:23:1: note:                 TestClass::TestClass(const TestClass&)


// have NO compilation errors
class TestClass2
{
public:
  TestClass2(const std::string& str) {}

};

int main() {
  TestClass2 tc(std::string("h"));
  return 0;
}

问题>为什么第一部分(TestClass)有编译错误? 是因为当const-reference可以引用临时对象时,NON-const引用不能引用临时对象吗?

谢谢

1 个答案:

答案 0 :(得分:4)

  

是因为当const-reference可以引用临时对象时,NON-const引用不能引用临时对象?

是的,就这么简单。临时对象可以绑定到const引用,但不能绑定到非const引用。

请注意,在C ++ 11中,我们得到右值引用(T&&),它将绑定到rvalues(临时值等)。有关左值,右值以及所有其他内容的更多信息,请参阅this question