首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用户声明的默认构造函数+类内初始化器!=用户提供的构造函数?

用户声明的默认构造函数+类内初始化器!=用户提供的构造函数?
EN

Stack Overflow用户
提问于 2013-07-05 22:20:59
回答 1查看 631关注 0票数 13

Clang documentation巧妙地解释了

如果类或结构没有用户定义的默认构造函数,C++不允许您像这样默认构造它的const实例(dcl.init,p9)。

其基本原理是,如果没有正确初始化const对象,则不能在以后更改该对象。下面的代码只有一个用户声明的Test默认构造函数,但是它的所有成员都有类内初始化器,

代码语言:javascript
运行
复制
#include<iostream>

class Test
{
public:
    Test() = default;
    void print() const { std::cout << i << "\n"; }
private:
    int i = 42;   // will propagate to the default constructor!
};

int main()
{
    Test const t; // <-- Clang chokes on the const keyword, g++ does not
    t.print();    // prints 42
}

因此,对于我来说,user-providing这个默认构造函数的基本原理似乎是多余的。事实上,g++ 4.8.1确实编译它没有问题(Online Example),尽管Clang <= 3.2没有编译。

问题:为什么完整的类内增强器+用户声明的默认构造函数的组合不足以默认构造一个const对象?是否对C++14标准进行了修复?

更新:谁能在Clang3.3/ 3.4上试用一下,看看与Clang3.2相比是否已经修复了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-05 22:42:13

是的,这是一个已知的问题。见active.html#253。它还没有在规范中被修复。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17497555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档