【发布时间】:2017-08-24 20:37:10
【问题描述】:
我正在为 Matlab 编写一个 mex 函数,并在编译期间注意到来自 Visual Studio 2017 的警告。在几乎删除了所有内容之后,除了包含和 mex 函数的裸包装,我不得不得出结论,警告实际上是指向库本身:
#include <mexplus/mxarray.h>
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
}
这个 sn-p 已经触发了警告
...\mexplus\mxarray.h(737): warning C4267: 'argument': conversion from 'size_t' to 'int', possible loss of data
我查看了文件,确实有一个循环在 size_t 中通过 std::vector 进行迭代,同时调用之前定义的函数,该函数将 int 作为参数:
733: std::vector<std::string> fieldNames() const {
734: MEXPLUS_ASSERT(isStruct(), "Expected a struct array.");
735: std::vector<std::string> fields(fieldSize());
736: for (size_t i = 0; i < fields.size(); ++i)
737: fields[i] = fieldName(i);
738: return fields;
739: }
函数fieldName在上面定义:
std::string fieldName(int index) const {
const char* field = mxGetFieldNameByNumber(array_, index);
MEXPLUS_ASSERT(field, "Failed to get field name at %d.", index);
return std::string(field);
}
所以,由于size_t 到int 的转换已经在不同的环境中造成了一些混乱,我的问题是:
- 我可以放心地忽略这个吗?
- 真的有理由让任何人像这样编写函数
fieldNames()(或者更确切地说,要求函数fieldName(int index)将整数作为参数)? - 这个警告可能实际上指向我的配置文件中的错误吗?
【问题讨论】:
标签: c++ matlab visual-studio mex