我知道一种调用函数的方法:
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 次 |
| 最近记录: |