gpt4 book ai didi

c++ - g++ - 如何禁用从 0 到指针类型的隐式转换?

转载 作者:太空狗 更新时间:2023-10-29 20:24:59 25 4
gpt4 key购买 nike

具体来说,我希望以下代码失败:

void a(void*){}
int main(){
a(0); // FAIL
a(NULL); // FAIL
a(nullptr); // success
}

我希望编译以下代码:

void a(int){}
void a(void*){}
int main(){
a(0); // calls first a
a(NULL); // calls first a; that's why I have -Werror
a(nullptr); // calls second a
}

下面的代码目前无法编译,但根据我的规则应该:

void a(std::size_t){}
void a(void*){}
int main(){
a(0); // two candidates
}

知道如何让 g++ 表现得像那样吗?

最佳答案

你可以用-Wzero-as-null-pointer-constant编译当您使用 0 或 NULL 时收到警告而不是 nullptr .为了将其提升为错误,我相信使用 -Werror=zero-as-null-pointer-constant会工作。

不幸的是,这只是一个警告,无法更改重载解析规则。我也相信NULL必须定义为 0 而不是 nullptr为了让警告捕捉到它,但至少从 GCC 4.9 开始,std::is_null_pointer<decltype(NULL)>::value is false GCC 在使用 NULL 时发出警告.

关于c++ - g++ - 如何禁用从 0 到指针类型的隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25462821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com