Joh*_*nyy 4 c++ pointers function
我有这个:
typedef void (*funcptr) (void);
int main(){
funcptr(); //this can compile and run with no error . WHAT DOES IT MEAN? WHY NO ERRORS?
}
Run Code Online (Sandbox Code Playgroud)
ken*_*ytm 14
该语句funcptr
通过其默认构造函数*创建一个实例并将其丢弃.
它与代码类似
int main () {
double();
}
Run Code Online (Sandbox Code Playgroud)
(注意:*从技术上讲,它执行默认初始化,因为并非所有类型都有构造函数.这些类型将返回默认值(零初始化),例如0.参见C++98§5.2.3/ 2和§8.5/ 5 for究竟发生了什么.)
在C++语言中,表单的任何表达式some_type()
都会创建一个type值some_type
.该值已初始化.
例如,表达式int()
创建一个值初始化的类型值int
.值初始化int
意味着零初始化,这意味着int()
计算编译时整数为零.
你的例子中也会发生同样的事情.您创建了类型的值初始化值funcptr
.对于指针类型,值初始化意味着使用空指针进行初始化.
(还要注意,这是绝对不正确的说,像表达式int()
,double()
或者一个与非类类型的OP使用"默认构造函数",非类类型没有构造函数.的概念初始化非类类型的由语言规范定义,不涉及任何"构造函数".)
换句话说,您并不是真正在代码示例中"使用函数指针".您正在创建一个空函数指针值,但您没有对它执行任何其他操作,这就是代码不会出现任何问题的原因.如果你想尝试通过该函数指针进行调用,它将如下所示funcptr()()
(注意两对()
),并且这段代码肯定会崩溃,因为当通过空函数指针值尝试调用时通常会发生这种情况.