【发布时间】:2012-08-09 17:14:45
【问题描述】:
我意识到在 GCC 4.7 中可以正常编译:
#include <memory>
int main() {
std::shared_ptr<int> p;
p = 0;
}
但是,int 或 int* 没有赋值运算符,int 或 int* 也没有隐式构造函数。 int* 有一个构造函数,但它是显式的。我检查了标准库的实现,构造函数确实是显式的,看不到任何可疑的赋值运算符。
程序实际上是格式正确的还是 GCC 搞砸了我?
【问题讨论】:
-
0是特殊文字,它转换为nullptr_t -
@LucDanton 这是因为 g++ 非常聪明,可以将
42 - 42转换为0。同样的事情发生(发生了?)在 Clang,IIRC,它在 GN2012 中被提及 -
@Abyx 你没抓住重点——
0在语言中没有作为文字的特殊处理。