我有以下代码:
void foo(int64_t x) {}
void bar(int64_t* x) {}
int main() {
int32_t a = 3;
foo(a);
bar(&a);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译此,它给出了不能转换的错误int32_t*来int64_t*,这是我想要的.
我尝试调用时是否可能出现类似的错误foo(a)?
作为一种解决方法,您可以使用已删除的版本重载foo:
void foo(int32_t x) = delete;
void foo(int64_t x) {}
Run Code Online (Sandbox Code Playgroud)
作为一个更通用的解决方案,您可以创建一个已删除的函数模板,然后将其专门用于int64_t(感谢@Someprogrammerdude):
template<typename T>
void foo(T) = delete;
template<>
void foo(int64_t x) {}
Run Code Online (Sandbox Code Playgroud)
有趣的是,它不能用clang 3.8编译,但是用clang 3.9和gcc 6.2编译好.