将char {argv []转换为(const char * const *)时的安全违规示例

时间:2015-12-07 09:44:07

标签: c++ c const

gcc中有一个众所周知的警告

final Size winStride = new Size(8, 8);
final Size padding = new Size(32, 32);

// Persons detection
hog.detectMultiScale(frame, outputPersons, outputWeights, 0.0, winStride, padding, 1.05, 2.0, false);

// Faces detection
faceDetector.detectMultiScale(frame, outputFaces);

并且通常在尝试使用函数warning: passing argument ... from incompatible pointer type [-Wincompatible-pointer-types] 的参数argv执行某些操作时会发生。

我已经阅读了这个答案:https://stackoverflow.com/a/28702525/447503。好的,C标准是这样说的,下面的代码将编译并发出警告:

main

不确定C ++,因为g ++在没有警告的情况下编译相同的代码。

这部分标准背后有什么原因吗?我可以在演员表后做些坏事,例如make int main(int argc, char *argv[]) { const char * const * b = argv; return b == 0; } 指向不可写的内存吗?

这可能与Why can't I convert 'char**' to a 'const char* const*' in C?重复,但Aaron的anwer不正确:阅读评论。

Kevin的答案是否错误?

我正在考虑添加一个方便的内联函数,例如:argv。与C风格的演员表不同,它是类型安全的。

0 个答案:

没有答案