我将尝试编写一个函数来解析命令行参数。以下是函数声明:
GNU编译器显示的错误是
有人建议采用声明指向常量字符的指针的指针(
void parse(int, char const **);
以防万一,我也尝试过使用 (const char)**
、const char **
和 cchar **
并使用 typedef const char cchar
. 然而,如果我将 char **
传递给该函数,如下所示:
代码为:
function(const char** data) {
//do something
}
char** myData;
function(myData);
所有这些尝试都会导致错误(因为它们应该是相同的),这是意料之中的。
void main(int argc, char **argv) {
parse(argc, argv);
GNU编译器显示的错误是
error: invalid conversion from 'char**' to 'const char**'
,而Clang显示的错误是candidate function not viable: no known conversion from 'char **' to 'const char **' for 2nd argument
。有人建议采用声明指向常量字符的指针的指针(
const char * const *
)等解决方案,但我不希望任一指针为常量,因为我想能够修改指针,以便使用for(; **argv; ++*argv)
循环一个参数。我如何声明“非常量指针的非常量指针,指向常量字符”?
char*const*
这样的语法,但是main
函数应该声明为int main(int argc, char**argv);
。 - Basile Starynkevitchparse(argc, const_cast<char const **>(argv))
将其转换为“const”。 - Henri Menkemalloc()
的结果进行强制类型转换,但在C++中这样做就无法编译。 - ad absurdum