【问题标题】:C equivalent of C++'s double colons?C 相当于 C++ 的双冒号?
【发布时间】: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++。

标签: c++ c sdl


【解决方案1】:

在 C 中,loadSurface 将被声明为简单

SDL_Surface *loadSurface(const char *path)

这意味着对SDL_LoadBMP的调用可以写成

SDL_Surface *loadedSurface = SDL_LoadBMP(path);

如果您对学习 C++ 不感兴趣,那么 std::string 的作用以及为什么需要 .c_str() 的详细信息就无关紧要了,在这种情况下也与教程无关。

【讨论】:

  • 我相信你,因为这完全回答了这个问题,同时避免了 C++。很好的答案。
  • @hvd 那太完美了。非常感谢。
【解决方案2】:

这里与:: 无关。 std::string 整体上只是指一个字符串,它可能在 C 中表示为 const char *(或者 char * 可能,因为我猜 C 程序员不关心变量的常量性)。 path.c_str() 只是意味着从std::string 变量path 中获取const char *,因此您可以放心地忽略它。

【讨论】:

    猜你喜欢
    • 2013-06-26
    • 1970-01-01
    • 2021-09-14
    • 2023-03-04
    • 2021-10-13
    • 2016-11-04
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多