标签: default-arguments

应该在哪里指定默认参数?

在我的工作场所,通常在声明中指定默认参数.什么是正常的自定义?我应该在方法声明或方法定义中指定默认参数吗?

编辑:有没有办法为引用指定默认参数?

编辑:有人可以提供参考参数的默认参数的示例吗?

c++ default-arguments

1
推荐指数
1
解决办法
363
查看次数

参数列表中任意点的默认参数是否可能?

希望看到这个的人知道默认参数:

void setCase (string &str, int form = UPPERCASE)
{
    for (char &c : str)
        c = (form == UPPERCASE ? c & ~0x20 : c | 0x20); //this bit differentiates english uppercase and lowercase letters
}

int main()
{
    string s1 = "HeLlO", s2 = s1, s3 = s1;
    setCase (s1, UPPERCASE); //now "HELLO"
    setCase (s2, LOWERCASE); //now "hello"
    setCase (s3); //now "HELLO" due to default argument
}
Run Code Online (Sandbox Code Playgroud)

使用默认参数的一个缺点是您必须在列表末尾启动默认参数.有时,这涉及将参数重新排列为一个看起来很愚蠢的订单.要解决这个问题,必须进行单独的重载.

让我拿一个Window API函数FindWindow,它通过类名,标题或两者找到一个窗口,作为一个例子:

HWND WINAPI FindWindow( //returns handle to …
Run Code Online (Sandbox Code Playgroud)

c++ default-arguments

1
推荐指数
1
解决办法
216
查看次数

如何使用非默认参数的值作为Python中默认参数的默认值?

这是我的班级栏:

class Bar:
    def __init__(self, start, end, open, volume, high=open, low=open, last=open):
        self.start = start
        self.end = end
        self.open = open
        self.high = high
        self.low = low
        self.last = last
        self.volume = int(volume)

    def __str__(self):
        return self.start.strftime("%m/%d/%Y\t%H:%M:%S") + "\t" + self.end.strftime("%H:%M:%S") + "\t" +str(self.open) + "\t" + str(self.high) + "\t" + str(self.low) + "\t" + str(self.last) + "\t" + str(self.volume)
Run Code Online (Sandbox Code Playgroud)

1)我试图初始化高,低和最后的任何打开.这是正确的方法吗?

2)当我打印(str(bar))我得到有趣的输出,如...

03/13/2012 12:30:00 13:30:00 138.91 <built-in function open> 138.7 <built-in function open> 13177656

python default-value default-arguments

1
推荐指数
1
解决办法
74
查看次数

将列表作为默认函数参数的奇怪行为

可能重复:
Python中的"最小惊讶":Mutable默认参数
列表扩展奇怪行为
使用方法名称进行金字塔遍历视图查找

假设我有这个功能:

def a(b=[]):
    b += [1]
    print b
Run Code Online (Sandbox Code Playgroud)

调用它会产生以下结果:

>>> a()
[1]
>>> a()
[1, 1]
>>> a()
[1, 1, 1]
Run Code Online (Sandbox Code Playgroud)

当我改为b += [1]b = b + [1],函数的行为会改变:

>>> a()
[1]
>>> a()
[1]
>>> a()
[1]
Run Code Online (Sandbox Code Playgroud)

b = b + [1]什么不同b += [1]?为什么会这样?

python list default-arguments

1
推荐指数
2
解决办法
166
查看次数

成员函数模板参数默认值

以下位代码在GCC 4.5.3中编译,但不在VS 2008和2010中编译.这是由于VS编译器错误还是标准禁止给出默认函数模板参数值?

#include <cstdlib>

struct Bar
{
    enum Group{ A , B , C };
};

struct Foo
{
    template<typename T>
    static void getSome( typename T::Group = T::A );
};

template<typename T>
void Foo::getSome( typename T::Group )
{
};

int main()
{
    Foo::getSome<Bar>();            // Does not compile in VS 2008 & 2010 (compiles in gcc 4.5.3)
    Foo::getSome<Bar>( Bar::C );    // Compiles in VS 2008 and gcc 4.5.3
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

错误信息

prog.cpp(11) : error C2589: '::' : illegal token …
Run Code Online (Sandbox Code Playgroud)

c++ templates function-templates default-arguments

1
推荐指数
1
解决办法
761
查看次数

C++默认参数 - 声明

我在班上创建了一个函数.我将所有声明放在头文件中,并将所有定义放在我的.cpp中.

在我的标题中:

class FileReader{

public:
FileReader(const char*);                        //Constructor
std::string trim(std::string string_to_trim, const char trim_char = '=');

};
Run Code Online (Sandbox Code Playgroud)

在我的.cpp中:

std::string FileReader::trim(std::string string_to_trim, const char trim_char = '='){

std::string _return;
for(unsigned int i = 0;i < string_to_trim.length();i++){
    if(string_to_trim[i] == trim_char)
        continue;
    else
        _return += string_to_trim[i];
}

       return _return;
}
Run Code Online (Sandbox Code Playgroud)

每当我尝试编译并运行它时,我都会遇到两个错误.

错误:为'std :: string FileReader :: trim(std :: string,char)'[-fpermissive]的参数2给出的默认参数

错误:在'std :: string FileReader :: trim(std :: string,char)'[-fpermissive]中的先前规范之后

我究竟做错了什么?我只是希望我的函数有这个默认参数.

c++ default-arguments

1
推荐指数
2
解决办法
9257
查看次数

接受默认参数的C函数

我试图编写一个具有可选参数的C函数,如果该参数未被"使用",则它具有默认值.

int DumpData(int a, int b, int c=0)
{

if(c != 0)
{
          //stuff
}
    //banana
}

/* Function Call */

DumpData(1, 2);
Run Code Online (Sandbox Code Playgroud)

有什么方法可以解决这个问题吗?

c function default-arguments

1
推荐指数
1
解决办法
109
查看次数

在不执行函数的情况下解析python函数中的默认参数

我需要将一个函数(不调用它)传递给另一个函数,但我需要为默认参数指定一个不同的值.

例如:

def func_a(input, default_arg=True):
    pass

def func_b(function):
    pass

func_b(func_a(default_arg=False))
Run Code Online (Sandbox Code Playgroud)

但是,这会调用 func_a()并将结果传递给func_b().

如何设置default_arg=False而不执行func_a

python function python-3.x default-arguments

1
推荐指数
1
解决办法
984
查看次数

在C中,我们如何强制varargs函数中的最后一个参数为终止null?

在C++中,我们可能会写这样的东西:

#include <cassert.h>
#include <cstdio.h>
#include <cstdarg.h>

void func(..., short end = 0) {

   // prevent caller from overriding default value with something other than null 
   assert(end == 0);

   va_list args;  

   short x;
   x = va_arg(args, short); 

   while (x != 0) {
       printf("%d", va_arg(args, short));
   }

   va_end(list);

   return;
}
Run Code Online (Sandbox Code Playgroud)

但是,C不支持默认函数参数.有没有我可以强制func在其参数列表的末尾有一个尾随空字符?有没有办法在没有程序员明确地将终止空值传递给函数的情况下执行此操作?

我们不希望看到如下调用:

int   x = 5;
float y = 6.4;
func(x, y, 0);
Run Code Online (Sandbox Code Playgroud)

我们只是想要func(x, y);.

是否可以编写一个可以转换文本的宏

func(x, y);

进入电话:

func(x, y, 0);

有没有办法在没有宏的情况下做到这一点?

c function variadic-functions default-arguments

1
推荐指数
1
解决办法
403
查看次数

函数模板的默认参数不起作用

我有一个函数,如果 value_one 大于或小于 value_two,它会根据传递的比较结果打印出来。

template<typename T, typename cmp = less<T> >
void function(T value_one, T value_two, cmp) {
    cmp comparator;
    if (comparator(value_one, value_two)) {
        std::cout << value_one;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,这个函数默认使用less函数对象来决定是否打印value_one,但也可以使用more函数对象。

template<typename T>
class more {
public:
    bool operator()(const T& value_one, const T& value_two) {
        return value_one > value_two;
    }
};

template<typename T>
class less{
public:
    bool operator()(const T& value_one, const T& value_two) {
        return value_one < value_two;
    }
};
Run Code Online (Sandbox Code Playgroud)

当我在 main 中调用以下代码时

more<int> a;
function(7,5,a);
Run Code Online (Sandbox Code Playgroud)

7 按预期打印出来,但下一个代码被认为是非法的,VS 告诉我找不到匹配的重载函数。

function(5,7);
Run Code Online (Sandbox Code Playgroud)

我认为 …

c++ templates visual-c++ default-arguments

1
推荐指数
1
解决办法
43
查看次数