对象创建异常
Object creation Anomaly
我在Windows 7
上使用Code::Blocks 10.05
和GCC
。我正在试验C++ constructors
,我编译并执行了以下程序。
#include<iostream>
using namespace std;
class base {
public:
base() {
cout<<"n Constructor Invokedn";
}
};
int main() {
base ob;
return 0;
}
产出如预期,如下所示。
Constructor Invoked
但在输入程序时,我不小心编译了以下程序。令我惊讶的是,它编译时没有任何错误或警告。
#include<iostream>
using namespace std;
class base {
public:
base() {
cout<<"n Constructor Invokedn";
}
};
int main() {
base ob();
return 0;
}
但该程序没有给出任何输出,只是一个空白屏幕。但没有错误或警告。由于它没有调用构造函数,我认为没有创建任何对象。但为什么没有错误或警告?我是不是错过了一些显而易见的东西?
当我添加行cout<<sizeof(ob);
时,我得到了以下错误消息。
error: ISO C++ forbids applying 'sizeof' to an expression of function type
那么什么是ob
?它被认为是一个函数还是一个对象?
请有人解释一下base ob();
的代码行,以及当执行这行代码时,内存中实际发生了什么?
谢谢。
您已经用声明了一个函数
base ob();
它不会有任何作用。请参阅此处
相关文章:
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 您应该在什么时候创建自己的异常类型
- 我正在尝试创建一个使用 c++ 中的参数包构造函数的异常类
- C++ 异常从字符串转换为c_str会创建垃圾字符
- 如果一个对象是在本地创建的,并在C++中作为异常抛出,那么本地对象如何在其范围之外有效,即在 catch 块中?
- Windows错误:异常:使用从C++到Python的ctypes创建DLL时出现访问冲突或Windows错误193
- 如何防止构造函数在引发异常时创建对象
- 挂钩创建文件抛出异常:读取访问冲突
- 为什么要创建自己的自定义异常类
- 尝试创建 vkCreateImageView 会导致异常
- 创建自己的异常(2种方法)C
- 无法创建两个从 std::logic_error 继承的自定义异常类
- 在C++中创建自定义异常
- 异常表达式创建的异常对象的类型
- 在QT中创建我自己的异常并在函数中抛出异常
- 是否可以对构造函数抛出异常的对象进行异常处理,该对象的异常处理接近其基于堆栈的代码创建
- C++通过继承 std::exception 来创建新的异常
- 创建继承自C++中io类的异常类
- 创建CFrameWnd会给出第一次机会的异常——为什么
- Boost::interprocess_library_error异常创建shared_memory_object