我正在学习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语言的解决方法?
答案 0 :(得分:9)
在C语言中,loadSurface
被简单声明为
SDL_Surface *loadSurface(const char *path)
这意味着对SDL_LoadBMP
的调用可以写为
SDL_Surface *loadedSurface = SDL_LoadBMP(path);
如果您对学习C ++不感兴趣,那么std::string
的用途以及为什么需要.c_str()
的详细信息就无关紧要,在这种情况下,也与本教程无关。
答案 1 :(得分:1)
与::
无关。整个std::string
只是指一个字符串,它可能在C中表示为const char *
(或char *
,因为我想C程序员并不在乎变量的常数。 )。 path.c_str()
只是意味着从const char *
变量std::string
中获取一个path
,因此您可以放心地忽略它。