是否可以创建一个可以通过给定常数初始化的C ++类?

时间:2018-06-18 21:26:19

标签: c++

此处two_tthree_t是2个假设类,分别绑定到常量2和3。

int foo(two_t)
{
    return 10;
}

int foo(three_t)
{
    return 20;
}

int bar()
{
    return foo(3); // 20 is returned
}

编辑:此问题的动机:

我正在考虑这个问题,因为可以对函数foo进行重载,接受0.你可以使用类型std::nullptr_t来实现。这就是为什么我想知道你是否也能用其他数值常数做到这一点。

2 个答案:

答案 0 :(得分:3)

你不能使用

return foo(3);

并且期望3仅根据参数的值转换为three_t而不是two_t

参数不能唯一地转换为仅基于值的类型。

标准显式地为整数类型的常量表达式赋予异常,该表达式的计算结果为零且std::nullptr_t。那是正确的。我无法想到其他例外情况。

答案 1 :(得分:-3)

  

是否可以创建一个可以通过给定常数来初始化的C ++类?

是的,但你不会喜欢它......

...
...

你确定要这么做吗?嗯。好的,你走了:

class A { A (int) { } };

请参阅?我说你不会喜欢它。但老实说,你正试图解决一个不同的问题而你正在寻找可能是错误的解决方案。这在网站上称为XY problem