我想看看c++中c_str函数的代码。
我怎么能看到-->
(1) 在英特尔编译器中 (2) 在 Visual Studio 2012 编译器中 (3) 在 GCC/MinGW 中。
我想看看c++中c_str函数的代码。
我怎么能看到-->
(1) 在英特尔编译器中 (2) 在 Visual Studio 2012 编译器中 (3) 在 GCC/MinGW 中。
打开<string>
头文件,按照#include
s 的踪迹,直到找到basic_string<T>
模板。这就是c_str
意志的来源。
例如,在 Visual Studio 2012 中,该函数位于<xstring>
标头中,如下所示:
const _Elem *c_str() const _NOEXCEPT
{ // return pointer to null-terminated nonmutable array
return (this->_Myptr());
}
有了一个不错的 ide,您可以右键单击该函数并选择“转到定义”。Visual Studio 有这个选项,所以这对于 MSVC 的实现来说是最快的。对于 gcc (libstdc++),我喜欢使用在线 doxygen docs。这是 c_str() 实现的链接。对于英特尔,我相信他们使用 libstdc++(gcc 的实现)。
使用 MinGW,您可以在 ...\MinGW\lib\gcc\mingw32\4.7.1\include\c++\debug\string 中找到头文件。该c_str()
函数直接在该标头中定义,而不是在包含中;我把文字放在下面。
const _CharT* c_str() const _GLIBCXX_NOEXCEPT
{
const _CharT* __res = _Base::c_str();
this->_M_invalidate_all();
return __res;
}
而不是试图找到并打开定义此函数的包含文件(假设它是在包含文件中定义的 - 通常是这种情况,但不是必需的):当我想查看的定义时我通常会做什么一个类是编写一个包含适当标题的单行程序,仅此而已。这里:
#include <string>
(是的,这就是完整的程序。)然后我使用/E
选项 (VC++) 或-E
选项(大多数其他编译器)进行编译,将输出重定向到一个文件,然后我可以在闲暇时仔细阅读。
这很容易直接从命令行执行,但如果您想使用 VS,请打开包含 的源文件的属性<string>
,转到条目 C/C++ -> 命令行,然后/E
在“附加选项”窗格中输入。然后编译。输出将出现在输出窗口中;单击它,然后是 control-A,然后是 control-C,您可以将其粘贴到您喜欢的任何编辑器中。
无论哪种方式,一旦您在编辑器中获得了预处理器输出,请从顶部搜索c_str
完整的单词。
如果您在 linux 上或使用 MinGW 或 WSL 如果您创建一个名为 string.txt 的文件
并将
#include <string>
并cpp string.txt > string.txt
从终端运行或到达此站点