std :: string :: data()不会返回char*

YSC*_*YSC 1 c++ stl c++17

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

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

根据cppreference 的文档std::string::data(),从C++ 17开始,这个函数可以返回一个非const指针,指向作为字符存储底层数组.

#include <string>

int main() {
    std::string hello("world");
    char* data = hello.data();
    (void) data;
}
Run Code Online (Sandbox Code Playgroud)

编译

g++ --version ; g++ -std=c++17 -O2 -Wall -Werror main.cpp
Run Code Online (Sandbox Code Playgroud)

产量

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();
                  ~~~~~~~~~~^~
Run Code Online (Sandbox Code Playgroud)

演示

住在coliru

You*_*You 10

根据libstdc ++文档,您正在寻找的功能是在libstdc ++版本7中实现的.它被列为Give'std :: string'非const'.data ()'成员函数,提案P0272R1.

同样,libc ++文档列出了与libc ++版本3.9中实现的相同的提议.

  • @SergeyA:如果你觉得这个问题很糟糕,那么就把问题投下来吧. (6认同)
  • @GillBates等等,是的,这是勺子喂养,是的,答案可以通过'gcc C++ 17支持状态'查询在几秒钟内查询.是的,我更喜欢堆栈溢出**而不是**变成LMGFY服务,是的,我会行使我的选项,允许我downvote/VTC问题这是一个谷歌查询,是的,我会downvote回答这些问题因为问题出现只听**,因为他们收到答案. (3认同)
  • @SergeyA"我做了" - 但问题仍然是积极排名 - 只是因为你没有发现它是一个好问题并不意味着其他人没有.仅仅因为你没有发现问题有用并不意味着你应该低估好答案 (2认同)
  • @GillBates至少在这个问题上我必须同意SergeyA.问题不大.OP并没有付出任何努力来找到它自己,即使他自己说答案"GCC 6.3.0还没有实现C++ 17功能CharT*std :: string :: data()呢;"_他显然甚至没有尝试搜索它.我仍然不同意低估一个完美的答案.恕我直言:问题应该被关闭为"Offtopic:为什么这个代码不起作用" (2认同)