【发布时间】:2018-12-06 16:09:45
【问题描述】:
我正在学习 C,但对 C++ 一无所知。 LazyFoo 的使用 C++ 的 SDL2 教程用双冒号做了一件我不理解的事情,因此无法在 C 中遵循。
如果有帮助,这里是教程的链接:
http://lazyfoo.net/tutorials/SDL/04_key_presses/index.php
SDL_Surface *loadSurface( std::string path )
{
//Load image at specified path
SDL_Surface *loadedSurface = SDL_LoadBMP( path.c_str());
if( loadedSurface == NULL )
{
printf("Unable to load image %s! SDL Error: %s\n", path.c_str(), SDL_GetError());
}
return loadedSurface:
}
除了函数参数和 LoadBMP 参数之外,这里的所有内容都对我有意义。我不知道:: 是什么意思,我也不知道path.c_str() 指的是什么。
请问,有人可以用 C 语言解释它吗,或者建议一个只用 C 语言的解决方法?
【问题讨论】:
-
这是一个命名空间,
::是作用域运算符。 -
C 和 C++ 是不同的编程语言(并且比它们表面上的相似性要大得多)。如果您不想学习 C++(这是一个合理的决定),请不要尝试阅读或使用 C++ 代码。 C 或 C++ 范围运算符中没有等价物。
-
:: 是范围解析。命名空间或类使用这些来消除歧义并帮助隐藏名称。老实说,这个 1 秒的谷歌会解释它。 .c_str() 调用将标准 c++ 字符串转换为您熟悉的 C 字符串。再次,快速谷歌解释。在当今世界,根本不学习 C++ 将是一个严重的障碍——即使在嵌入式领域也是如此。你应该帮自己一个忙,至少要熟悉它。
-
范围解析运算符。考虑从good C++ book 学习 C++,而不是随机教程。
-
你的讲师在她的lecture 中说你不需要知道 C++ 来学习 C,而 Kate Gregory 说你不需要知道 C 来学习 C++。