当我调用一个分配传递的 const &
的构造函数时到 const &
成员变量,会发生什么?自const ref
,我的理解是“非常少”——没有复制、移动、调用构造函数等——只是复制可能是指针的东西。
例如
class ClassA
{
public:
ClassA(const double a):a_(a){}
const double a_;
};
class ClassB
{
const ClassA &classRef_;
public:
ClassB(const ClassA& a):classRef_(a){}
};
int main()
{
ClassA aObj(5.212);
ClassB bObj(aObj);
}
特别是,如果我想声明 ClassB
的函数(比如这里的构造函数)如noexcept
,我需要了解什么(如果有的话)ClassA
?
最佳答案
在
int i;
int &r = i;
r = i
不是赋值,而是初始化。引用的行为类似于“别名”:r
的行为类似于 i
。
您不能指定引用,只能指定其引用对象:
r = 2; // same as i = 2
这里:
class ClassB
{
const ClassA &classRef_;
public:
ClassB(const ClassA& a):classRef_(a){}
};
在构造函数中,表达式a
指定一个ClassA
对象(具有常量左值)。
:classRef_(a)
表示“初始化成员引用classRef_
,使其成为a
指定的对象的别名”。
新引用classRef_
将引用与a
引用相同的对象。 没有复制。
关于c++ - 在构造函数期间调用哪个运算符来分配给 const 引用(re.noexcept),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31690064/