C++ 更改构造函数后初始化构造函数中的常量变量

C++ 更改构造函数后初始化构造函数中的常量变量,c++,C++,我有一个客户机类,它接收一个名为emailAddress的std::string变量。这就是代码现在的样子,它可以工作: private: const std::string email; Client::Client(std::string emailAddress) : email{emailAddress} { } 现在,我想检查电子邮件中是否包含@之类的字符或没有奇怪字符的有效名称。我想用正则表达式做这个。 现在,我的问题是,在更改参数变量后,如何初始化const std:

我有一个客户机类,它接收一个名为emailAddress的std::string变量。这就是代码现在的样子,它可以工作:

private:
    const std::string email;

Client::Client(std::string emailAddress) : email{emailAddress}
{

}
现在,我想检查电子邮件中是否包含@之类的字符或没有奇怪字符的有效名称。我想用正则表达式做这个。
现在,我的问题是,在更改参数变量后,如何初始化const std::string email变量?它说它不想这样做,因为它是一个常量变量,这就是为什么它现在在构造函数的初始化列表中。

您可以将参数传递给函数,让函数返回修改后的字符串

class Client {
private:
    const std::string email;
    static std::string validateEmail(std::string email) {
        // ...
        return modifiedEmail;
    }

public:
    Client::Client(std::string emailAddress) : email{validateEmail(std::move(emailAddress))}
    {

    }
};

您可以将参数传递给函数,并让函数返回修改后的字符串

class Client {
private:
    const std::string email;
    static std::string validateEmail(std::string email) {
        // ...
        return modifiedEmail;
    }

public:
    Client::Client(std::string emailAddress) : email{validateEmail(std::move(emailAddress))}
    {

    }
};

如果您需要更改它,那么它为什么是const?以后不需要更改它,它应该在构造函数中初始化,然后是constemail{somefunctionthattperformessnecessarychangesmailaddress}?噢,这很有意义,谢谢!!const数据成员有几个缺点,通常不值得。它几乎总是使类型不可分配和不可移动。通常最好使用类接口来保持不变性。将成员设为私有,不提供setter。如果您需要更改它,那么它为什么是const?它不需要稍后更改,应该在构造函数中初始化,然后是constemail{somefunctionthattperformessneedchangesmailaddress}?噢,这很有意义,谢谢!!const数据成员有几个缺点,通常不值得。它几乎总是使类型不可分配和不可移动。通常最好使用类接口来保持不变性。将成员设置为私有,并且不提供setter。