此处two_t
和three_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
来实现。这就是为什么我想知道你是否也能用其他数值常数做到这一点。
答案 0 :(得分:3)
你不能使用
return foo(3);
并且期望3
仅根据参数的值转换为three_t
而不是two_t
。
参数不能唯一地转换为仅基于值的类型。
标准显式地为整数类型的常量表达式赋予异常,该表达式的计算结果为零且std::nullptr_t
。那是正确的。我无法想到其他例外情况。
答案 1 :(得分:-3)
是否可以创建一个可以通过给定常数来初始化的C ++类?
是的,但你不会喜欢它......
...
...
你确定要这么做吗?嗯。好的,你走了:
class A { A (int) { } };
请参阅?我说你不会喜欢它。但老实说,你正试图解决一个不同的问题而你正在寻找可能是错误的解决方案。这在网站上称为XY problem。