В первом случае вы сравниваете сами значения указателя, а не то, на что они указывают.И константа «Hello» не имеет того же адреса, что и первый элемент argv
.
. Попробуйте использовать:
const char ** cmdPtr = std::find(argv+1, argv+argc, std::string("Hello")) ;
std::string
знает, что сравнивать содержимое, а не адреса.
Для версии массива компилятор может сложить все литералы в один, поэтому каждый раз, когда во всем коде встречается «Hello», это действительно один и тот же указатель.Таким образом, сравнение на равенство в
const char * testAr[] = { "Hello", "World" };
const char ** testPtr = std::find(testAr, testAr+2, "Hello");
дает правильный результат