c++ - 在“0”参数上强制编译错误(C++)
问题描述
const wchar_t*
任何人都可以告诉我,当函数参数传递一个 0 指针时,是否有办法强制编译错误?
例如:
void func(const wchar_t* a)
{
...
}
int main()
{
...
func(0); // <- this should generate a compilation error
...
}
我的意图不是跳过函数内部对此参数的任何验证检查,而是在函数调用根本没有意义时阻止编译。
我正在使用 Visual Studio 2019
谢谢!!
更新
如@Jarod42 所述,我尝试为 std::nullptr_t 添加重载
这会产生一个编译错误,但它产生的错误是
“多个重载函数实例与参数列表匹配”
虽然它阻止了编译,但错误本身有点误导,并没有解决真正的问题
添加一个用类型替换的参数的重载int
也会得到一个误导性的编译错误“试图访问已删除的函数”
是的,可悲的是,这些都不能阻止有(const wchar_t*)0
争论的电话
所以,我想说我想拒绝0
文字和(const wchar_t*)0
论点
解决方案
您可能会添加重载std::nullptr_t
:
void func(std::nullptr_t) = delete;
或者也许是一个全部:
template <typename T> void func(T) = delete;
推荐阅读
- android - Ionic 4 从图库中选择多个图像,图像选择器不起作用
- docker - 容器未启动时的 nginx proxy_pass 和 docker 错误
- sql - 如何使用 Oracle REGEXP 替换未放置在模式之间的单词和模式内的不同单词?
- .net-core - 在区域控制器索引中找不到页面错误
- git - 当我引入一个错误并能够回到我之前的提交时,我想保存我的工作。我应该如何用 git 解决这个问题?
- php - 使用 php exec 检查 npm 插件是否存在
- forth - 用数字填充数组的问题
- python - 使用 Mechanicalsoup 导航多个页面/表单
- django - Bootstrap 4 选择表单字段不适用于 django
- java - 合并多个 if 语句