是否有可能将模数重载到;当只接收前导号码时;在c++中返回数字/100 ?



我很好奇是否有一个简单的函数或结构之外的可能性。虽然我的代码稍微简化了一点,但如果不需要在显示和计算之间来回转换百分比,这将增加很多。

您不能凭空创建一个全新的后缀操作符。操作符的列表、语法和优先级设置为stone。

然而,语言中有一些东西可能足以满足您的需求:用户定义的文字

constexpr long double operator ""_pct(unsigned long long int v) {
return (long double)v / 100;
}
void foo() {
double x = 30_pct;
}

只能用于文字值,而不能用于任意表达式。但是,这是你能得到的最好的结果。

最好的方法是定义一个类型来处理百分比。

class Percentage {
public:
constexpr Percentage(int); // use explicit? This depends on requirements
constexpr Percentage(unsigned long long int);
constexpr Percentage(double); 
constexpr operator int() const;
constexpr operator double() const;
constexpr Precentage fromRatio(double x) {
return {x * 100};
}
private:
.....
};
// custom literal is just sugar coating
Percentage operator ""_pct(unsigned long long int v) {
return Percentage(v);
}

除了前面讨论过的用户定义文字外,还可以使用百分比值类型。比如:

class Percent
{
public:
constexpr Percent(double v) : val(v) {} 
constexpr double value() const { return val; }
constexpr double scale() const { return val / 100; }
/** brief Multiply a number by its scaled value
*  Can also be done as a free function
*/
double operator *(double other) const 
{
return other * scale();
}
// other operators
private:
double val;
};
std::ostream& operator <<(std::ostream& os, Percent p)
{
os << p.value() << '%';
return os;
}

正确使用constexpr,您应该能够在没有任何运行时开销的情况下获得您想要的结果。

相关内容

  • 没有找到相关文章

最新更新