assigning to a function that returns a reference
我目前正在重构一些代码,我想知道以下内容(例如,为返回引用的函数赋值)是否实际上是错误的样式(至少看起来很奇怪):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <iostream> class A{ public : double & operator()() { return this->x; }; double operator()() const{ return this->x; }; protected : double x = 0.0; }; int main(){ A a; a() = 4.0; std::cout<<a()<<std::endl; //prints 4.0 as expected. }; |
这背后的背景是,我有一些并行工作的代码,使用如下的代码:
1 | A.d |
不是一种选择,但是:
1 | A() |
可以,因为我可以将内存选择留给一个函数。
(我知道编码风格是一个有点主观的问题,但我是一名科学家,而不是软件工程师,很感谢良好的实践反馈)
1 | a() = 4.0; |
这不是一个很坏的做法。每次取消引用一个容器时,都要做一些等效的事情:
1 | a[i] = 4.0; |
这里,
在这里,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <iostream> class A{ public : double & operator*() { return this->x; } double operator*() const{ return this->x; } protected : double x = 0.0; }; int main(){ A a; *a = 4.0; std::cout<<(*a)<<std::endl; //prints 4.0 as expected. }; |
1 2 3 | double & operator()() { return this->x; }; |
注意,在定义函数时不需要尾随
1 2 3 4 5 6 7 | class A{ // ... double & operator()() { return this->x; } // ... }; |
或:
1 2 3 4 5 6 7 8 9 | class A{ // ... double & operator()(); // ... }; double & A::operator()() { return this->x; } |