【问题标题】:why a const object of an empty class cant be created为什么无法创建空类的 const 对象
【发布时间】:2011-03-17 06:55:53
【问题描述】:
#include <iostream>

class A {
   public:
      void foo() const {
          std::cout << "const version of foo" << std::endl;
      }
      void foo() {
          std::cout << "none const version of foo" << std::endl;
      }
};

int main()
{
  A a;
  const A ac;
  a.foo();
  ac.foo();
}

上面的代码无法编译,谁能告诉我为什么?

【问题讨论】:

  • 好奇,这在 Visual Studio 中编译没有问题。

标签: c++ constants empty-class


【解决方案1】:

你需要初始化它。 This is a known problem with the spec.

【讨论】:

  • 不允许它背后的概念是什么?
  • 我没有得到关于用户提供的默认构造函数的措辞。如果提供了空的A::A(),它会编译吗?
  • @Gunner 没有任何措辞允许空类的特殊情况在没有初始化程序或构造函数的情况下保留。如果创建了 const 对象,显然需要初始化具有数据成员的类。 @sharptooth,是的。
  • 哈!缺陷被报告十年后:“这个问题应该再次提出......”我认为这个问题不会在 C++0x 中得到修复。
  • @James McNellis:我想这并没有真正困扰任何人——你添加一个空的默认构造函数就可以了。
【解决方案2】:

初始化为:

const A ac = A();

工作代码:http://www.ideone.com/SYPO9


顺便说一句,这不是初始化:const A ac(); //deceptive - not an initializaiton!

【讨论】:

  • 你也可以给 A 一个用户定义的构造函数,即使它什么也不做。它没有构造函数且 const 未初始化的事实意味着它不认为对象已初始化。
猜你喜欢
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多