gpt4 book ai didi

c++ - 将 std::string ** 转换为 char *** 它恰好可以工作。如何?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:16:04 24 4
gpt4 key购买 nike

考虑以下代码:

std::vector<std::string> foo{{"blee"}, {"bleck"}, {"blah0000000000000000000000000000000000000000000000000000000000000000000000000000000000"}};
std::string *temp = foo.data();
char*** bar = reinterpret_cast<char***>(&temp);

for (size_t i = 0; i < foo.size(); ++i){
std::cout << (*bar)[i] << std::endl;
}

显然这是粗略的代码,但它恰好有效。

http://ideone.com/2XAJYR

我想知道它为什么有效?是否有一些我不知道的 C++ 奇怪规则?还是仅仅是糟糕的代码和未定义的行为?

我将其中一个字符串做得很大,以防进行一些小字符串优化。

改编自:Cast a vector of std::string to char***

最佳答案

这是很多未定义的行为。

如果字符串实现恰好包含一个指向字符串数据的指针作为其唯一的数据成员,那么它似乎“有效”,因此 string 数组与数组具有相同的内存布局字符*。至少一个流行的实现 (GNU) 就是这种情况,但肯定不是您可以依赖的东西。

关于c++ - 将 std::string ** 转换为 char *** 它恰好可以工作。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29032658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com