C等价于C ++的双冒号吗?

时间:2018-06-27 17:17:20

标签: c++ c sdl

我正在学习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语言的解决方法?

2 个答案:

答案 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,因此您可以放心地忽略它。