我正在 C++ 中创建一个自初始化数组类,我想知道如果用户尝试分配超过 0x7fffffff
我会如何抛出错误而不是异常。字节。
类似于<array>
其中:
error C2148: total size of array must not exceed 0x7fffffff bytes
这是我正在测试的一个构造函数的代码:
template<typename T>
Array<T>::Array(const size_t _SIZE) : _SIZE(_SIZE), _content(nullptr){
#define __SIZE__ _SIZE
#if (__SIZE__ > 0x7fffffff)
#error Total size of Array must not exceed 0x7fffffff bytes.
#endif
_content = new T[_SIZE];
memset(_content, 0, (sizeof(_content) * _SIZE));
}
我创建数组的方式如下:
Array<int> foo(-1) //-1 of size_t = ((2^31)*2)-1 error should be shown since ((2^31)*2)-1 > ((2^31)*2)-1
size_t
的最大尺寸为 ((2^31)*2)-1
和0x7fffffff
是 (231)-1 现在的问题是
错误没有执行我从未使用过 #if
之前的宏,我需要让它工作......
如有任何帮助,我们将不胜感激。
最佳答案
您不能对变量使用预处理器。预处理器是在编译之前运行的一个单独步骤,它不知道源代码中使用的变量,尤其是它们的运行时值。
为此,您可能需要使用 assert
:
assert(_SIZE <= 0x7fffffff);
如果将负值传递给需要无符号值的函数,那么您应该收到编译器警告,如果没有,则应该启用更多警告。
关于c++ - 如何使用 #error 指令 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16558420/