std::string::data() 不会返回 char* [关闭]

Posted

技术标签:

【中文标题】std::string::data() 不会返回 char* [关闭]【英文标题】:std::string::data() won't return a char* [closed] 【发布时间】:2017-01-26 16:01:36 【问题描述】:

由于我无法编译以下程序,我想知道是否:

GCC 6.3.0 尚未实现 C++17 功能 CharT* std::string::data(); 我的代码不符合 C++17。

根据the documentation of std::string::data() on cppreference,从C++17开始,这个函数可以返回一个非常量指针,指向作为字符存储的底层数组

代码

#include <string>

int main() 
    std::string hello("world");
    char* data = hello.data();
    (void) data;

编译

g++ --version ; g++ -std=c++17 -O2 -Wall -Werror main.cpp

输出

g++ (GCC) 6.3.0
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

main.cpp: In function 'int main()':
main.cpp:6:28: error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
     char* data = hello.data();
                  ~~~~~~~~~~^~

演示

Live on coliru

【问题讨论】:

对于精通 C++ 方言、标准和 GCC 的人来说,找到 GCC C++ 支持矩阵应该不是什么大问题,可以在gcc.gnu.org/onlinedocs/libstdc++/manual/… 自豪地获得 我投票决定将此问题作为离题结束,因为该帖子的原因尚不清楚 - 当然 OP 可以自己找到支持矩阵? 我很好奇,不是想当个混蛋,这和字符串 * 运算符有区别吗? @SergeyA 我不精通 C++ 方言。我不知道 GCC C++ 支持矩阵。不过还是谢谢。 @JonathanWakely Grady 的意思是 --- 我猜 --- 使用 &amp;str[0] 而不是 str.data() 【参考方案1】:

根据the libstdc++ documentation,您正在寻找的功能是在 libstdc++ 版本 7 中实现的。它被列为 Give 'std::string' a non-const '.data()' member function em>,提案P0272R1.

同样,the libc++ documentation 列出了与 libc++ 3.9 版中实现的相同的提议。

【讨论】:

@SergeyA:如果您认为这个问题不好,请投反对票。 我做到了。但是糟糕的答案为糟糕的问题提供了支持反馈循环,因此为了摆脱第一个问题,还必须惩罚第二个问题。 @SergeyA “我做到了”——但这个问题的排名仍然是积极的——仅仅因为你没有发现它是一个好问题并不意味着其他人没有。仅仅因为你没有发现这个问题有用并不意味着你应该对好的答案投反对票 @GillBates 等人,是的,这是勺子喂食,是的,答案可以在几秒钟内通过“gcc C++17 支持状态”查询进行谷歌搜索。是的,我更喜欢堆栈溢出而不是变成 LMGFY 服务,是的,我会行使我的选项,允许我对谷歌查询的/VTC 问题投反对票,是的,我会否决答案当问题出现时,这些问题只听,因为它们会收到答案。 @GillBates 至少在这个问题上我必须同意 SergeyA 的观点。这个问题不好。 OP 没有付出任何努力自己去发现它,即使他自己说了答案 "GCC 6.3.0 as not implemented C++17 feature CharT* std::string::data() yet;" 他显然甚至没有尝试去寻找它。我仍然不同意对一个完美的答案投反对票。恕我直言:这个问题应该被关闭为“Offtopic:为什么这段代码不起作用”

以上是关于std::string::data() 不会返回 char* [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为什么std :: string_view :: data不包含空终止符?

C ++通过引用dll中的函数传递std :: string

返回假;声明不会“返回”

为啥 IsDialogMessage() 可能永远不会返回?

C++ 函数不会返回

为啥 eof() 永远不会返回 true?