内联函数和main之间有什么区别,如下所示:
inline double cube(double side)
{
return side * side * side;
}
int main( )
{
cube(5);
}
Run Code Online (Sandbox Code Playgroud)
vs只是定期声明一个函数:
double cube(double side)
{
return side * side * side;
}
int main( )
{
cube(5);
}
Run Code Online (Sandbox Code Playgroud)
vs功能原型?
double cube(double);
int main( )
{
cube(5);
}
double cube(double side)
{
return side * side * side;
}
Run Code Online (Sandbox Code Playgroud) c++ inline-functions function-prototypes function-declaration
请突出显示以下函数声明之间的区别:
void (*p) (void *a[], int n)
void *(*p[]) (void *a, int n)
是否将virtual关键字放在返回值类型之前或之后的函数声明中是否有任何区别?
virtual void DoSomething() = 0;
void virtual DoSomething() = 0;
Run Code Online (Sandbox Code Playgroud)
void virtual在重构一些遗留代码的同时找到了语法,并且想知道它正在编译...
所以在这个又一个古老的C++代码库中,我经常发现这种风格:
// ...
void FooBar::Eggs(int spam);
void FooBar::Eggs(int spam) {
// implementation here
// ...
}
Run Code Online (Sandbox Code Playgroud)
一般来说,我确实理解在C++中声明一个函数的重点是什么,但是我找不到任何理由来进行这种复制.有没有理由不消除它?
在清洁代码(第3章,每个功能的一个抽象级别)中有一些关于Stepdown Rule(顶级和低级别的高级功能)的内容.
我使用coffeescript时应该怎么做,因为coffeescript中没有函数声明.
例:
seeAMovie = ()->
BuyTheTicket()
watch()
BuyTheTicket = ()->
//some thing
watch = () ->
//some thing
Run Code Online (Sandbox Code Playgroud)
我想这样做.
我正在尝试在python 3.4中使用我的代码中的theano.但是,有许多功能具有以下奇怪的语法
def c_code(self, node, name, (var1, var2), (var3,), sub):
...
Run Code Online (Sandbox Code Playgroud)
即它们在函数定义中有括号.
Python会对它们抛出语法错误
文件".../Theano-0.7.0/theano/scalar/basic.py",第1011行
def c_code(self,node,name,(var1,var2),(var3,),sub):
^ SyntaxError:invalid句法
现在,一旦我删除那些额外的括号,一切都很好,但我是python的新手,并注意到python 3中有很多变化,所以这些括号可能需要用其他东西替换而不是删除.
有人可以向我解释(a)函数定义中包含括号的含义是什么?(b)这些是否以及如何与python 3一起使用?
我想建立一个原型:
def foo(a,t=([0]*len(a))):
print t
Run Code Online (Sandbox Code Playgroud)
由于目前不重要的原因.我传入的是可变长度列表参数.但是,Linux上的Python 2.7.10总是返回如下:
>>> a = [1,2,3,4]
>>> foo(a)
[O, 0]
Run Code Online (Sandbox Code Playgroud)
没有函数调用,这些都不会以意外的方式运行.是什么导致Python总是认为在foo()中的变量赋值期间传递的列表是长度为2?
当我在其中一个源文件中遇到这个时,我正在浏览一些代码.
int st_insert(table, key, value)
register st_table *table;
register st_data_t key;
st_data_t value;
{
unsigned int hash_val, bin_pos;
register st_table_entry *ptr;
hash_val = do_hash(key, table);
FIND_ENTRY(table, ptr, hash_val, bin_pos);
if (ptr == 0) {
ADD_DIRECT(table, key, value, hash_val, bin_pos);
return 0;
} else {
ptr->record = value;
return 1;
}
}
Run Code Online (Sandbox Code Playgroud)
这种风格是什么?这是一种声明函数的模糊方法吗?有没有什么理由可以使用它而不是正常的函数声明?
在 Go lang 源代码中,我看到一个没有任何主体声明的函数。 https://github.com/golang/go/blob/master/src/math/log10.go#L9
func Log10(x float64) float64
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,它给了我一个错误:缺少 __ 的函数体
https://play.golang.org/p/Ncp-0-8vHB
这在 Go 源代码中是如何工作的?我的意思是数学包是如何编译的?此源文件仅用于文档目的吗?
似乎 Log10 是 log10 的公共/公开版本,但是语言中没有“getter”约定或类似的东西,那么 Log10 的主体在哪里声明???
在 Dart 中 - 与许多其他语言一样 - 声明函数的方法不止一种。问题是,是否存在任何差异,即“我什么时候应该使用哪个”?
void foo(int i) {
print('i = $i');
}
void main() {
void Function(int) bar = (int j) {
print('j = $j');
};
foo(1);
bar(2);
}
Run Code Online (Sandbox Code Playgroud)
除了可以被覆盖的事实之外,声明foo或bar其他方面有什么区别吗?bar
c++ ×3
c ×2
coding-style ×2
python ×2
coffeescript ×1
compilation ×1
dart ×1
function ×1
go ×1
keyword ×1
kwargs ×1
python-2.7 ×1
syntax ×1
variables ×1
virtual ×1