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

时间:2017-01-26 16:01:36

标签: c++ stl c++17

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

  • 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

1 个答案:

答案 0 :(得分:10)

根据the libstdc++ documentation,你正在寻找的功能是在libstdc ++版本7中实现的。它被列为给'std :: string'一个非const'.data()'成员函数,提案P0272R1

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