tho*_*ald 2 c++ visual-studio-2010 visual-c++
我需要先转换它吗?我在另一篇文章中看到,如果函数需要const char*,则可以使用.c_str().只是char*怎么样?
std::vector<char> buffer(s.begin(), s.end());
foo(&buffer[0], buffer.size());
s.assign(buffer.begin(), buffer.end());
Run Code Online (Sandbox Code Playgroud)
有没有办法摆脱这是保证在所有平台上工作,一个简单的事实,一个串一个char*string使用连续的存储不是必需的.
行动你最安全,最便携的当然是某处复制的字符串,并使用contigious存储(vector也许),并用它来代替.
vector<char> chars(my_string.begin(), my_string.end());
char* ptr = &chars[0];
Run Code Online (Sandbox Code Playgroud)
如果你想要hacky和不便携并且显然不安全,你可以确认你的string实现确实使用了有条件的存储,然后可能使用这个:
&my_str[0]
Run Code Online (Sandbox Code Playgroud)
但我会打击任何为我工作的开发人员.
我已经意识到目前没有已知的STL实现不会将字符串数据存储在连续的数组中,这样可以确保&my_str[0]安全.在我们即将推出的C++ 0x标准中,存储也必须是连续的.
有人建议,因为如果这些事实证明我的帖子事实上是不正确的.
决定你自己,但我拒绝.这不是当前的 C++标准,因此不是必需的.我仍然会在实践中按照我的建议做事,在任何代码审查中,我都会标记任何假设底层存储是可靠的代码.
考虑一下.假设有一个关于vtable指针的问题.有人想通过查看vtable来检查一个类并获得指向虚函数的指针.我会立即告诉他们不要这样做,因为没有提到如何在C++中实现虚方法.我所知道的每个实现都使用vtable,我想不出更好的方法.多态性很可能会永远使用vtables实现.这样可以直接检查vtable吗?
IMO没有,因为这取决于未记录的实现细节.你无法控制它,它可能随时改变.即使您预计它永远不会改变,依靠这些实现细节仍然是糟糕的工程.
自行决定.