【发布时间】:2016-10-29 18:59:59
【问题描述】:
如果非literal 类类型没有constexpr 构造函数(它不是constexpr 可构造函数),那么非静态constexpr 成员函数是否有意义?我的意思是如果你不能在编译时构造对象,你将如何使用它的成员函数?
反正各大编译器都不抱怨,这让我觉得是标准允许的。
不过,您可以在运行时使用此类constexpr 成员函数,而不会出现任何问题。现在唯一的问题是constexpr 在这种情况下的作用是什么,如果有的话。 我的最佳猜测是 constexpr 成员的返回值是在编译时评估的(如果可能的话),所以在运行时调用它必须做一个简单的复制。 p>
我的猜测是正确的,还是 constexpr 说明符在这种情况下绝对没有意义(即成员函数在运行时被评估)?
【问题讨论】:
-
我对@987654329@ 了解不多,但你的前提和猜测对我来说都是合理的。
-
您可能需要改写您的问题以专注于非文字类类型。例如,聚合没有
constexpr构造函数,但拥有constexpr成员函数的聚合是有意义的。 -
同理,如果你只提供私有构造函数(没有任何类型的工厂),你将无法使用非静态的公共方法。
-
@Jarod42 您可以在运行时使用此类
constexpr定义的函数,但尚不清楚在这种情况下constexpr的预期效果是什么(如果有的话)。 -
如果你把
constexpr这个词去掉,你的粗体字仍然是正确的。
标签: c++ language-lawyer constexpr