【发布时间】:2012-04-02 09:07:16
【问题描述】:
我很好奇为什么 C++ 没有通过 void 定义:
typedef struct { } void;
即无法实例化的类型的值是什么,即使该安装必须不产生任何代码?
如果我们使用gcc -O3 -S,那么以下两者都会产生相同的汇编程序:
int main() { return 0; }
和
template <class T> T f(T a) { }
typedef struct { } moo;
int main() { moo a; f(a); return 0; }
这很有意义。 struct { } 只接受一个空值,很容易优化掉。事实上,奇怪的是它们在没有-O3 的情况下产生了不同的代码。
但是,您不能简单地使用 typedef void moo 来实现相同的技巧,因为 void 不能假定任何值,甚至不能假定为空值。这种区别有什么用处吗?
还有各种其他强类型语言,例如 Haskell,可能还有 ML,它们的 void 类型具有值,但没有公开提供无值类型,尽管有些拥有本机指针类型,其行为类似于 void *。
【问题讨论】:
标签: c++ templates optimization types