2013-12-20 58 views
1
void foo(Type1 a, Type2 b = value2) 

我可以知道Type2作为接受默认值的参数的限制吗?我认为type2的value2在编译时应该是可判定的。 例如,一个整数。它是否正确?C++中默认参数类型的限制是什么

+0

是的,这是正确的。需要在编译时在[tag:C++]中看到任何类型和常量转换。 –

回答

1

你有相当多的灵活性。 value2需要是一个在函数声明处有效的表达式(通过“有效”我的意思是它使用的名称在范围内等),其类型必须可以隐式转换为Type2,与任何初始化。每次调用函数时都会评估value2。因此,例如:

#include <vector> 
#include <iostream> 

int i; 

void foo(std::vector<int> v = std::vector<int>(i)) { 
    std::cout << v.size() << "\n"; 
} 

int main() { 
    i = 1; 
    foo(); 
    i = 2; 
    foo(); 
} 

有了正确的初始化,Type2甚至可以是引用类型:

void bar(int &j = i); 
+0

好的,我明白了。所以基本上,默认值可以是在运行时评估的,并且每次调用该函数时都会在运行时进行评估。 – KKKoo0

+0

@ KKKoo0。是。尝试声明全局'int i'并使用'i ++'作为默认值。 – MSalters

1

value2必须编译时转换为Type2

0

是的。

唯一的限制是默认变量应该是最后一个。你可以有多个默认变量,只要确保把它们全部留在最后。不要与非默认设备混合使用。

相关问题