C эквивалент двойных двоеточий C ++? - PullRequest
0 голосов
/ 27 июня 2018

Я изучаю C и ничего не знаю о C ++. Учебник LazyFoo по SDL2, использующий C ++, работает с двойными двоеточиями, чего я не понимаю и поэтому не могу следовать в 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 голосов
/ 27 июня 2018

В C loadSurface будет объявлено просто

SDL_Surface *loadSurface(const char *path)

, что означает, что вызов SDL_LoadBMP может быть записан как

SDL_Surface *loadedSurface = SDL_LoadBMP(path);

Сведения о том, что делает std::string и зачем нужен .c_str(), не имеют значения, если вы не заинтересованы в изучении C ++, и в этом случае также не относятся к учебнику.

0 голосов
/ 27 июня 2018

Ничего общего с :: здесь. std::string в целом просто ссылается на строку, которая может быть выражена в C как const char * (или, может быть, char *, поскольку, я думаю, программисты на C не заботятся о постоянстве переменных). path.c_str() просто означает получение const char * из std::string переменной path, так что вы можете спокойно ее игнорировать.

...