首页 > 解决方案 > 在“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论点

标签: c++

解决方案


您可能会添加重载std::nullptr_t

void func(std::nullptr_t) = delete;

或者也许是一个全部:

template <typename T> void func(T) = delete;

推荐阅读