分配给一个 returns 引用的函数
assigning to a function that returns a reference
我目前正在重构一些代码并想知道以下(即分配给一个 returns 引用的函数)是否真的是糟糕的风格(至少看起来很奇怪):
#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.
};
这背后的背景是我有一些并行工作的代码并使用类似的东西:
A.d
根本不是一个选项,而:
A()
会工作,因为我可以将内存选择留给一个函数。
(我知道编码风格是一个有点主观的问题,但我是一名科学家而不是软件工程师,欢迎提供良好实践反馈)
a() = 4.0;
这并不是什么坏习惯。每次取消引用容器时,您都在做同样的事情:
a[i] = 4.0;
这里 operator[]
正在返回一个引用,而您正在分配它。
operator()
可能不是这里更具可读性的选择。根据代码的上下文,operator*
之类的内容可能是更好的选择,但这是一个见仁见智的问题;)
#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.
};
double & operator()() {
return this->x;
};
请注意,定义函数时不需要尾随 ;
。做:
class A{
// ...
double & operator()() {
return this->x;
}
// ...
};
或:
class A{
// ...
double & operator()();
// ...
};
double & A::operator()() {
return this->x;
}
我目前正在重构一些代码并想知道以下(即分配给一个 returns 引用的函数)是否真的是糟糕的风格(至少看起来很奇怪):
#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.
};
这背后的背景是我有一些并行工作的代码并使用类似的东西:
A.d
根本不是一个选项,而:
A()
会工作,因为我可以将内存选择留给一个函数。
(我知道编码风格是一个有点主观的问题,但我是一名科学家而不是软件工程师,欢迎提供良好实践反馈)
a() = 4.0;
这并不是什么坏习惯。每次取消引用容器时,您都在做同样的事情:
a[i] = 4.0;
这里 operator[]
正在返回一个引用,而您正在分配它。
operator()
可能不是这里更具可读性的选择。根据代码的上下文,operator*
之类的内容可能是更好的选择,但这是一个见仁见智的问题;)
#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.
};
double & operator()() {
return this->x;
};
请注意,定义函数时不需要尾随 ;
。做:
class A{
// ...
double & operator()() {
return this->x;
}
// ...
};
或:
class A{
// ...
double & operator()();
// ...
};
double & A::operator()() {
return this->x;
}