该类型 vector<char *>不可转换为const vector<const char*>.例如,以下内容给出了编译错误:
#include <vector>
using namespace std;
void fn(const vector<const char*> cvcc)
{
}
int main()
{
vector<char *> vc = vector<char *>();
fn(vc);
}
Run Code Online (Sandbox Code Playgroud)
我理解为什么vector<char*>不能转换为vector<const char*>- 类型的额外成员const char *可以添加到向量中,然后它们可以作为非const访问.但是,如果向量本身是常量,则不会发生这种情况.
我最好的猜测是,这将是无害的,但是编译器无法推断出这将是无害的.
怎么能解决这个问题?
这个问题是由C++ FQA 在这里提出的.
为什么我会加入这段代码:
void foo ( const int ** );
int main() {
int ** v = new int * [10];
foo(v);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这个错误:
invalid conversion from ‘int**’ to ‘const int**’ [-fpermissive]|
Run Code Online (Sandbox Code Playgroud)
我认为可以从非const转换为const.
想象一下:
uint64_t x = *(uint64_t *)((unsigned char[8]){'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'});
Run Code Online (Sandbox Code Playgroud)
我读过那种类型的双关语是未定义的行为。为什么?我实际上是将 8 个字节的字节重新解释为一个 8 字节的整数。我看不出这与 a 有什么不同,union除了类型双关语是未定义的行为而unions 不是?我亲自问过一个程序员同事,他们说如果你在做这件事,要么你知道自己做得很好,要么就是你犯了一个错误。但是社区说这种做法应该永远避免?为什么?