给定C++中的函数,其参数只是类型且没有标识符,
void foo1(int, int, int){cout << "called foo1";}
Run Code Online (Sandbox Code Playgroud)
我可以这样称呼它:
int main()
{
foo1(10, 10, 10);
}
Run Code Online (Sandbox Code Playgroud)
为什么这是C++中的有效构造?这只是C++的特质,还是这种声明实际上有一些目的?我们可以实际访问以某种方式传递的参数吗?(这种方法声明在Java中不起作用.)
据我所知,C++中的变量有三种可能的链接值 - 没有链接,内部链接和外部链接.
因此,外部链接意味着可以在多个文件中访问变量标识符,而内部链接意味着可以在同一文件中访问它.但内部联系的重点是什么?为什么不只有两个可能的标识符链接 - 没有链接和外部链接?对我来说,似乎全局(或文件)范围和内部链接起着同样的作用.
是否存在内部链接实际上有用且未被全局范围覆盖的用例?
在下面的例子中,我有两段代码 - 第一段链接到static int i11(有内部链接),第二段没有.两者都做了同样的事情,因为main已经可以访问变量i11,因为它的文件范围很大.那么为什么要有一个叫做内部联系的单独链接
static int i11 = 10;
int main()
{
extern int i11;
cout << ::i11;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给出了相同的结果
static int i11 = 10;
int main()
{
cout << ::i11;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:为了增加更多的清晰度,根据HolyBlackCat的定义,内部链接实际上意味着你可以在同一个翻译单元中转发声明一个变量.但是为什么你甚至需要为文件中已经全局访问的变量做到这一点..这个功能有什么用例吗?
php 5.3中的isset()似乎表现得出乎意料.我有一个名为DB details的类,它使用getter和setter封装了一堆字符串属性.
$ dbdetails-> getDatabasename()计算为字符串("mydb")
这会引发500错误:
if(!isset($dbdetails->getDatabasename())){
//do something
}
Run Code Online (Sandbox Code Playgroud)
这很好用
$databasename = $dbdetails->getDatabasename();
if(!isset($databasename)){
//do something
}
Run Code Online (Sandbox Code Playgroud)
我无法看到任何日志输出,因为即使将错误ini param设置为(打开),apache也会发送回500.我知道这肯定与isset调用有关.知道什么可能是错的,或者我发现了PHP错误?
下面的第一个作业无法编译,但我不确定为什么,静态方法的方法签名与函数方法签名匹配,尽管它不使用类型参数。尽管第二行除了类型参数化之外具有相同的签名,但编译良好。
这背后的原因是什么?
public class GenericSample<T> {
public static void staticLambdaMtd(Integer a) {
}
public static<X> void staticLambdaMtd2(X a) {
}
// Funca<T> fa1 = GenericSample::staticLambdaMtd;//does not compile !
Funca<T> fa = GenericSample::staticLambdaMtd2;//does compile !
}
interface Funca<A> {
public void funct(A a);
}
Run Code Online (Sandbox Code Playgroud)