将字符串大小(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::npos
是 size_t
类型。将 size_t
分配给 int
会导致转换期间发生溢出。修复如下:
size_t pos;
size_t lpos = string::npos;
或者,按照 user2079303 的建议,您可以使用 string::size_type
,或者更方便的是 auto
,如果您想支持带有自定义分配器的字符串。
如何去掉下面的警告?
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::npos
是 size_t
类型。将 size_t
分配给 int
会导致转换期间发生溢出。修复如下:
size_t pos;
size_t lpos = string::npos;
或者,按照 user2079303 的建议,您可以使用 string::size_type
,或者更方便的是 auto
,如果您想支持带有自定义分配器的字符串。