【问题标题】:assigning to a function that returns a reference分配给返回引用的函数
【发布时间】:2016-12-16 09:44:24
【问题描述】:

我目前正在重构一些代码,想知道以下内容(即分配给返回引用的函数)是否实际上是不好的样式(至少看起来很奇怪):

#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()

会起作用,因为我可以将内存选择留给一个函数。

(我知道编码风格是一个有点主观的问题,但我是一名科学家而不是软件工程师,非常感谢良好的实践反馈)

【问题讨论】:

标签: c++ reference coding-style


【解决方案1】:
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;
}

【讨论】:

    猜你喜欢
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多