【发布时间】:2019-03-02 12:32:28
【问题描述】:
所以,我写了这样的东西
#include <iostream>
using namespace std;
void f(int32_t i)
{
cout << "int32: " << i << endl;
}
void f(int16_t i)
{
cout << "int16: " << i << endl;
}
void f(int8_t i)
{
cout << "int8: " << i << endl;
}
void f(uint32_t i)
{
cout << "uint32: " << i << endl;
}
void f(uint16_t i)
{
cout << "uint16: " << i << endl;
}
int main() {
uint8_t i = 0u;
f(i);
return 0;
}
然后打印出来了
int32: 0
我有点困惑:
这是明确定义的行为,还是特定于实现?
有哪些规则可以确定此处使用哪个重载以及将变量转换为什么类型?
【问题讨论】:
-
这不是问题的答案,但我认为很高兴知道可以使用受约束的模板来禁用隐式转换。示例:coliru.stacked-crooked.com/a/d25bb8d892d8dc9b(或 constexpr,如果可以用作替代)
标签: c++ c++11 overloading implicit-conversion