相关疑难解决方法(0)

为什么指针向量不能转换为const指针的const向量?

该类型 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 在这里提出的.

c++ casting const

15
推荐指数
2
解决办法
7068
查看次数

从int**转换为const int**

为什么我会加入这段代码:

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.

c++ pointers

8
推荐指数
2
解决办法
5935
查看次数

为什么类型双关语被认为是 UB?

想象一下:

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 不是?我亲自问过一个程序员同事,他们说如果你在做这件事,要么你知道自己做得很好,要么就是你犯了一个错误。但是社区说这种做法应该永远避免?为什么?

c casting undefined-behavior type-punning

4
推荐指数
1
解决办法
926
查看次数

标签 统计

c++ ×2

casting ×2

c ×1

const ×1

pointers ×1

type-punning ×1

undefined-behavior ×1