我知道一种调用函数的方法:
func(x, y);
Run Code Online (Sandbox Code Playgroud)
有更多方法可以调用函数吗?
可以调用函数
显式地,通过在指定函数之后提供参数括号(在构造函数的情况下,这显然不是正式的正确措辞,因为它们没有名称,但无论如何),
隐式地,特别是析构函数和默认构造函数,还有隐式类型转换,
通过函数调用运算符以外的运算符()
,特别是复制赋值运算符=
和解除引用运算符->
,
在放置new
表达式中,通过在后面放置一个参数括号来调用指定的分配函数new
(不确定这是否作为一种单独的方式).
此外,图书馆设施当然可以为您调用功能.
我认为以上列表是详尽无遗的,但我不确定.我记得Andrei Alexandrescu 在他的Modern C++ Design书中列举了产生可调用东西的构造,并且给我一个惊喜.因此,上述内容可能并非详尽无遗.
可以调用任意函数:
使用f(arguments...)
符号
通过指向函数的指针(无论是成员函数还是非函数)
通过std::function
- (将检查未指定的实现,尽管我希望它在幕后使用指向函数的指针或指向成员函数的指针,因此没有新的语言功能)
在某些情况下也会调用特定于类的函数:
当在堆栈上创建对象时,以及当动态初始化静态/全局或线程特定的对象或动态分配的对象时,或者使用放置new
以及计算表达式时,将调用构造函数
当对象离开作用域、delete
线程退出、临时对象被销毁以及显式调用析构函数时,将调用析构函数x.~X()
在表达式求值期间可以调用所有形式的运算符([]
、+=
、==
等)<
任意非成员函数可以通过以下方式运行:
函数可能会由于较早的调用std::atexit()
而运行std::at_quick_exit()
,如果它们抛出则std::terminate
可能会运行
线程创建和异步信号(同样,接口接受指向函数的指针,并且没有理由认为任何实现已经或将使用任何其他技术来实现调度)
特定功能会在非常特定的情况下触发:
main()
由运行时执行
std::unexpected
、std::unexpected_handler
、std::terminate
在违反动态异常规范时被调用
也可以使用setjmp
并longjmp
“跳回”函数......不过与调用它不太一样。
虽然不是真正的“C++”,但也可以使用内联汇编语言/链接汇编器来安排函数执行,写入可执行内存。
归档时间: |
|
查看次数: |
1574 次 |
最近记录: |