C++将std :: string传递给Pointer-to-C-String参数

Arc*_*man 2 c++ sdl

我正在使用SDL中的一个函数,其中一个参数是类型的const GLchar* const*,所以为了调用它,我需要传入一个C字符串的引用,如下所示:

const char *str = "test";
glShaderSource(... , &str, ...);
Run Code Online (Sandbox Code Playgroud)

但是,我有一个std::string我想要传入的内容,并且做这样的事情会产生错误:

std::string str = "test";
glShaderSource(... , &str.c_str(), ...);
Run Code Online (Sandbox Code Playgroud)

我知道我可以简单地创建一个新const char*变量并将其保存为std::string:

const char *cstr = str.c_str();
Run Code Online (Sandbox Code Playgroud)

但有什么方法可以解决这个问题吗?我不喜欢制作一个新的变量.我尝试使用lambda但是没有用.

Lig*_*ica 5

不,没有办法绕过它.

该函数glShaderSource需要一个指向字符缓冲区指针的指针(因为它希望你传递一个或多个 C字符串),并且你不能获取rvalue的地址(这就是表达式str.c_str()).

但这不是一个真正的问题,因为在你的最后一个例子中,你所做的只是指向指针的指针.这非常便宜和容易.

不要害怕"制造一个新的变量" - 无论如何命名的东西都是好的.