首页 > 解决方案 > 是否可以创建一个可以由给定常数初始化的 C++ 类?

问题描述

这里two_tthree_t是分别绑定到常量 2 和 3 的 2 个假设类。

int foo(two_t)
{
    return 10;
}

int foo(three_t)
{
    return 20;
}

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

编辑:这个问题的动机:

我正在考虑这个问题,因为可以重载foo接受 0 的函数。你可以通过使用 type 来做到这一点std::nullptr_t。这就是为什么我想知道您是否也可以使用其他数字常量来做到这一点。

标签: c++

解决方案


你不能使用

return foo(3);

并期望3转换为three_t而不是two_t仅基于参数的值。

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

该标准明确为整数类型的常量表达式设置了例外,该表达式的计算结果为 0 和std::nullptr_t. 那是对的。没有其他我能想到的例外。


推荐阅读