gpt4 book ai didi

c++ - 使用临时实例初始化对象

转载 作者:行者123 更新时间:2023-11-27 23:26:49 25 4
gpt4 key购买 nike

// 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引用不能引用临时对象而const引用可以引用临时对象?

谢谢

最佳答案

Is it because that a NON-const reference cannot refer to a temporary object while a const-reference can refer to a temporary object?

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

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

关于c++ - 使用临时实例初始化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8661608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com