我知道,从隐式转换char **到const char **无法做到的,为什么,而且转化为char *const *作品.请参阅底部以获取有关该说明的链接.
除了一件特别的事情外,这一切都是有道理的 所以我有以下代码:
#include <stdio.h>
void
print(const char *const*param)
{
printf("%s\n", param[0]);
}
int
main(int argc, char **argv)
{
print(argv);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我将其编译为C++代码,它编译得非常好.但是,如果相同的代码仅编译为C代码,我会收到错误(好吧,警告,但我们假设-Werror,即将警告视为错误).
GCC:
test.c: In function ‘main’:
test.c:12:11: warning: passing argument 1 of ‘print’ from incompatible pointer type [-Wincompatible-pointer-types]
print(argv);
^
test.c:4:1: note: expected ‘const char * const*’ but argument is of type ‘char **’
print(const char *const*param)
^
Run Code Online (Sandbox Code Playgroud)
铛:
test.c:12:11: warning: passing 'char **' …Run Code Online (Sandbox Code Playgroud) 我遇到了与reinterpret_cast相关的奇怪错误.看看下面的代码:
int* var;
reinterpret_cast<void const **>(&var);
Run Code Online (Sandbox Code Playgroud)
VSC++ 2010中的错误:错误C2440:'reinterpret_cast':无法从'int**'转换为'const void**'
gcc 4.1.2中的错误:从'int**'类型的reinterpret_cast到'const void**'的类型转换为constness
gcc中的错误4.6.2:从类型'int**'的reinterpret_cast到'const void**'的类型转换掉了限定符
有没有人知道为什么编译器说我正在抛弃const.我,我的几个同事都不知道它有什么问题.
感谢帮助!
鉴于以下代码:
void foo( const char ** buffer );
void bar()
{
char * buffer;
foo( &buffer );
}
Run Code Online (Sandbox Code Playgroud)
为什么如果foo()函数有一个const char *参数编译器在传入一个char *变量时不会抱怨?但是在使用时char **,它不能将其转换为const char **? 编译器是否const在前一种情况下添加任何限定符?
我已经阅读了 C++ 标准的第 4.4 节,这让我更加困惑。
我正在尝试编写一个函数来解析命令行参数.这是函数声明:
void parse(int, char const **);
Run Code Online (Sandbox Code Playgroud)
为以防万一,我也尝试过(const char)**,const char **和cchar **使用typedef const char cchar.但是,如果我将一个char **函数传递给函数,所有这些(如预期的那样,因为它们应该都是相同的)会导致错误,如:
void main(int argc, char **argv) {
parse(argc, argv);
Run Code Online (Sandbox Code Playgroud)
我从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.
我已经看到这样的解决方案被建议为声明一个指向char(const char * const *)的const指针的指针,但我不希望任何指针都是const因为我希望能够修改指针,所以我可以迭代一个参数使用for(; **argv; ++*argv).如何声明"指向const char的非const指针的非const指针"?