【发布时间】:2013-02-12 01:36:52
【问题描述】:
我认为这是 MSVC 中的有效代码:
MyClass* pMc = &MyClass();
但是,当我尝试对原始数据类型执行相同操作时,我遇到了编译错误。
int* pInt = &int();
错误:
error C2101: '&' on constant
我有 3 个问题:
- 为什么
int()给我一个常数? - 为什么错误C2101首先存在?获取常量的地址有什么问题?
- 有没有一种方法可以声明指向临时对象的 int(或其他原始)引用? (即不先创建局部变量)
关于第三个问题:
我确实不想做这样的事情:
int i = int();
int* pInt = &i;
如果我正在处理对本地对象的引用(原因无关紧要),我不希望每个对象都声明两次。这很乏味,很烦人,而且名字会很混乱。
【问题讨论】:
-
您确实意识到
int()可能与0相同?所以你的声明实际上等同于&0,这没有多大意义。 -
另外
&MyClass()不是一个完全有效的代码,它不应该编译。 MSVC++ 愚蠢地允许它。 -
标准不允许对临时对象的非常量引用,尽管 MSVC 有一个扩展来规避这一点。最好不要尝试将具有未定义行为的解决方案组合在一起。
-
@David 没有意识到它和 0 完全一样。为什么它不给我一个对象?。 Seth Carnegie Chris 解释了它编译的原因。谢谢大家。
-
completely valid code哦?
标签: c++ pointers constructor initialization constants