问答

关于调用析构函数的问题?

作者:admin 2021-06-24 我要评论

#include stringint main(){ std::string s; s.~string(); return 0;} 这种写法 g++ 和 clang++ 都报错 s.std::string::~string(); 这么写只有 clang++ 报错, g...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
#include <string>

int main()
{
    std::string s;
    s.~string();

    return 0;
}

这种写法 g++ 和 clang++ 都报错

s.std::string::~string();

这么写只有 clang++ 报错, g++ 通过编译

在不用 using声明 的情况下,如何写才能让 g++ 和 clang++ 同时通过编译?

版本:
g++ 10.1.0
clang++ 10.0.0

###

这可能是 clang 的一个 bug。不过可能没有什么人用,于是也没有什么人关注 ...

clang 报的错误是这里不是一个 class_name ,那么给它一个 class_name 就好了。std::string 只是 std::basic_string<char> 的一个 typedef ,那么用 s.std::string::~basic_string(); 就行了。

===================

你这个程序有未定义行为,s 会被析构两次。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 关于调用析构函数的问题?

    关于调用析构函数的问题?

  • ES6 模块导出方式的区别

    ES6 模块导出方式的区别

  • laravel validator 怎么验证可能存在的

    laravel validator 怎么验证可能存在的

  • Print.js打印element表格,打印的时候

    Print.js打印element表格,打印的时候

腾讯云代理商
海外云服务器