我对干净的代码/编码风格有疑问,疑问是,何时应该在C ++构造函数参数中使用关键字const
。例如,考虑以下类:
class A {
public:
B& b;
explicit A (const B& b_): b(b_) {}
};
在此代码中,我想从类b
初始化引用A
,同时,我想表示将不使用作为参数传递给类A
构造函数的引用更改对象b_
的值。但是,显示的代码将无法编译,并且编译器将显示以下消息:
"error: binding reference of type ‘B&’ to ‘const B’ discards qualifiers"
[我知道我可以在const
类属性中使用关键字b
,但是,它将使属性不变,并且我不想对此属性施加约束。因此,我想知道在这种情况下该怎么办。
我想表达的是,作为参数传递给类A构造函数的引用将不会用于更改对象b_的值。
但是那不是真的。传递给A
的构造函数的引用可以修改。不是必要]由A
的构造方法直接进行,而是由A
的其他任何修改对象的成员函数进行。
[如果函数通过const&
接受参数,则该函数的调用者有权期望该函数或执行该函数的任何进程取决于
您不应该对用户撒谎。 A
的构造函数的从属结果是可以修改传递给它的参数。因此,它应该是非const
引用。
同样重要的是,在构造函数退出后,创建A
的行为基本上取决于给定的对象继续存在
const&
参数可以绑定到临时变量,因此有人像A a(B{})
这样调用您的构造函数将非常容易;此语句后的a
引用已损坏的对象。如果您的函数采用了非const
引用,则可能是编译错误。