C++ 构造函数能否知道它是否正在构造一个 const 对象?

问题描述

在 C++ 中,对象构造函数不能是 const 限定的。

但是 - 类 A 的对象的构造函数能否知道它是在构造 const A 还是非常量 A

受到关于 this question 的讨论中的一个细节的启发。

解决方法

不,因为复制省略(以及所谓的保证复制省略)可以改变构造“后”对象的常量:

struct A {
  bool c;
  A() : c(magic_i_am_const()) {}
  A(const A&)=delete;      // immovable
};

const A f() {return {};}
A g() {return f();}        // OK
void h() {
  A x=f();                 // OK
  const A y=g();           // OK
}

x.cy.c 应该是什么?