【发布时间】:2014-02-24 19:33:18
【问题描述】:
请考虑以下代码:
#include <iostream>
class Point
{
public:
int x,y;
Point(int newx, int newy) : x(newx), y(newy) {}
};
Point operator"" x(const unsigned long long i)
{
return Point(i, 0);
}
int main()
{
Point p = 5x;
std::cout << "\npoint is " << p.x << "," << p.y << "\n\n";
return 0;
}
UDL 可以工作,但是是否可以使它对 Point 的构造函数的两个参数都有效?例如3x5 是 Point(3,5) 或什至 3.5x 的文字,然后在运算符主体中进行一些数学运算以将整个部分与浮点数的小数部分分开......?
【问题讨论】:
-
使用聚合初始化,例如
Point p = {3,5}。 IMO 比一些不透明的文字要好得多。 -
@Paranaix 我不知道你能做到这一点!这是 c++11 的新特性吗?
-
@1.618 在一般情况下,是的(就像 UDL 一样);这称为列表初始化。但是如果你从类中删除所有构造函数(这对于这样一个简单的结构可能是明智的),大括号被解释为聚合初始化,从 C++98 开始工作。
标签: c++ c++11 operator-overloading user-defined-literals