PHP 5类型提示
PHP 5引入了类型提示.函数现在能够强制参数为对象(通过在函数原型中指定类的名称)或arrays(自PHP 5.1起).但是,如果将ifNULL用作默认参数值,则允许将其作为后续调用的参数.
以下摘录如下:
if NULL用作默认参数值,它将被允许作为任何后续调用的参数.
上述意思是:
如果要使用默认参数,请使用类型提示,它只能具有NULL默认值.
即 code1中的代码是错误的,并导致:
致命错误:具有类类型提示的参数的默认值只能是 NULL
function setName ( string $name = "happ") {
...
}
Run Code Online (Sandbox Code Playgroud)
代码2中的代码是正确的:
function setName ( string $name = NULL) {
...
}
Run Code Online (Sandbox Code Playgroud)
为什么在php中分配了这个约束?
C++如何处理与具有默认参数的函数相关的函数指针?
如果我有:
void foo(int i, float f = 0.0f);
void bar(int i, float f);
void (*func_ptr1)(int);
void (*func_ptr2)(int, float);
void (*func_ptr3)(int, float = 10.0f);
Run Code Online (Sandbox Code Playgroud)
哪个函数指针可以用于哪个函数?
例如,如果我有以下数据类:
data class Data(
val name: String = "",
val number: Long = 0
)
Run Code Online (Sandbox Code Playgroud)
和可以返回的功能null:
fun newName(): String? {}
fun newNumber(): Long? {}
Run Code Online (Sandbox Code Playgroud)
我知道如果不是,我可以使用以下代码来使用函数的值null:
val newName = newName()
val newNumber = newNumber()
val data = Data(
if (newName != null) newName else "",
if (newNumber != null) newNumber else 0
)
Run Code Online (Sandbox Code Playgroud)
但有没有办法在值为时使用Data类的构造函数中指定的默认值null?
我在文档中找不到任何内容,但我希望这样的东西能够工作:
val data = Data(newName()?, newNumber()?)
Run Code Online (Sandbox Code Playgroud)
但那不编译.
Eclipse Juno不断在嵌入式Web浏览器中打开我的HTML文件,而不是在嵌入式语法高亮编辑器中打开.
我安装了:
具体请参阅我的安装应用程序的屏幕截图
我需要它使用Django模板+任何其他Python模板与HTML +普通HTML + JS文件.
如何找到此编辑器,并将其选为默认值?
eclipse django-templates html-editor default-parameters eclipse-juno
可能重复:
实现no-op std :: ostream
在c ++中是否有任何与NULL等效的流?我想编写一个函数,如果用户希望将内部输出到某个地方,则会接收流,但如果没有,则输出进入某个假的地方
void data(std::stream & stream = fake_stream){
stream << "DATA" ;
}
Run Code Online (Sandbox Code Playgroud)
我希望能够选择做data()或data(std::cout)
以下代码无法使用g ++版本5.4.0编译并带有选项-std=c++1y:
void f(int=0) ;
int main() {
f(); // ok
(*f)(2);// ok
(*f)();// ok c++11; error with c++14: too few arguments to function
return 0;
}
Run Code Online (Sandbox Code Playgroud)
声明的函数有默认参数,所以这里有什么问题?感谢帮助.
为什么要g++ -c -std=c++11编译?
我最近碰到了以下情况:
#include <iostream>
int *p = 0;
int f() {
p = new int(10);
return 0;
}
void g(int x, int *y = p) {
std::cout << y << std::endl;
}
int main() {
g(f());
}
Run Code Online (Sandbox Code Playgroud)
这非常微妙,因为您通常不希望默认参数在评估函数调用期间发生变化.我不得不看一下程序集来发现这个错误.
现在我的问题是:这是否真的是未定义的行为,因为对函数参数的评估顺序没有任何保证?
c++ operator-precedence undefined-behavior default-parameters
我一直在四处寻找,试图找出不包括Java中函数的默认参数的原因.
我知道可以使用varargs模拟行为,或者通过创建几个接受较少参数的重载函数来模拟行为,并调用接受所有参数的实际函数.但是,这些选项都不符合C++语法的清晰度和易用性.
有谁知道是否有一个可靠的技术原因会产生类似的东西
void myFunc(int a=1, int b=2) {...}
Run Code Online (Sandbox Code Playgroud)
在新版Java中不受欢迎或无法撤销?
我想在一个带有参数IntPtr.Zero的函数中使用默认参数值IntPtr.这是不可能的,因为IntPtr.Zero它不是编译时常量.
有什么方法可以做我想做的事吗?
Scala-lang参考5.5.1和6.6.1给我的印象是默认参数能够引用先前评估的参数:
class Test(val first: String, val second: String = first)
Run Code Online (Sandbox Code Playgroud)
但从实验来看,似乎唯一的方法就是使用表格:
class Test(val first: String)(val second: String = first)
Run Code Online (Sandbox Code Playgroud)
然后定义辅助构造函数或创建伴随类,以避免在创建时指定第二组括号.我真的不明白第二个构造函数是如何工作的,它看起来像一个curried函数所以我可能会猜测有必要first独立评估second,这是正确的吗?这个形式是必要的还是有一些合成糖可以用来调整第一个构造函数来做我想要的?
constructor scala operator-precedence default-parameters default-arguments
c++ ×4
c# ×1
c++11 ×1
c++14 ×1
constructor ×1
eclipse ×1
eclipse-juno ×1
html-editor ×1
intptr ×1
java ×1
kotlin ×1
nullable ×1
ostream ×1
php ×1
scala ×1
stream ×1
type-hinting ×1