将字符串大小(string::npos)分配给整数变量时隐式常量转换警告溢出

overflow in implicit constant conversion warning while assigning string size(string::npos) to an integer variable

如何去掉下面的警告?

size_t filesize = getFilesize(strLogFileName.c_str());
// Open file
int fd = open(strLogFileName.c_str(), O_RDONLY, 0);
assert(fd != -1);
// Execute mmap
char* mmappedData =
    (char *) mmap(NULL, filesize, PROT_READ, MAP_PRIVATE | MAP_POPULATE, fd, 0);
assert(mmappedData != NULL);
string strFileContent(mmappedData);

// warning: overflow in implicit constant conversion
int pos, lpos = string::npos;

可能需要对代码进行哪些更改才能修复此警告,而不是忽略此警告?

使用正确的类型:

size_t pos, lpos = std::string::npos;

auto。我们不使用 int 索引标准容器,也不使用任何 signed。并注意 pos 未初始化。

string::npossize_t 类型。将 size_t 分配给 int 会导致转换期间发生溢出。修复如下:

size_t pos;
size_t lpos = string::npos;

或者,按照 user2079303 的建议,您可以使用 string::size_type,或者更方便的是 auto,如果您想支持带有自定义分配器的字符串。