Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对声明为“extern”的函数的限制;“是吗?”?C++;功能仍然可用吗?_C++_C_Language Features_Extern - Fatal编程技术网

C++ 对声明为“extern”的函数的限制;“是吗?”?C++;功能仍然可用吗?

C++ 对声明为“extern”的函数的限制;“是吗?”?C++;功能仍然可用吗?,c++,c,language-features,extern,C++,C,Language Features,Extern,extern“C”除了指定不应损坏的标识符外,是否还做了其他事情 在声明为“代码>外部”“C”的函数中是否有C++特性? > P>只影响名称的修饰,使外部可见性对其他应用程序清晰。 < P>不应从它们中抛出异常,否则您可以实现“代码”>“外部”“C”//Cube函数,其中包含了许多C++特性。 这很好: MyObject myobj; extern "C" { int myfunc(char *c) { // c++ features used here

extern“C”
除了指定不应损坏的标识符外,是否还做了其他事情


在声明为“代码>外部”“C”<代码>的函数中是否有C++特性?

> P>只影响名称的修饰,使外部可见性对其他应用程序清晰。

< P>不应从它们中抛出异常,否则您可以实现“代码”>“外部”“C”//Cube函数,其中包含了许多C++特性。 这很好:

MyObject myobj;
extern "C" { 
    int myfunc(char *c) 
    {    // c++ features used here
        std::string s = myobj.method(....
    }
}

extern“C”
不表示编译为C代码。这意味着应该编译函数,以便可以从C代码调用它;这实际上影响的是实现。C++中的任何东西在这样的函数中都是很好的,包括抛出异常。

但是它们仍然可以重载吗?或者他们可以返回C++对象吗?@ H2CO3-它们不会被重载,例如我将手动重载,但是返回C++对象的点应用。<代码>外“C”< /代码>也可能影响调用约定,它肯定会影响不同命名空间之间的可见性和名称冲突。标准是这样说的。那么,我使用的框架所处理的异常是什么?QT?例外情况不应该越过<代码>外部> C“<代码>边界,因为您不能确定调用方可以处理它们,或者即使调用方是用C++编写的。我意识到有点晚了,但是模板呢?它们不可能在外部声明中工作,因为它禁止名称篡改?