精华内容
下载资源
问答
  • C++11初始化列表与参数列表的作用

    千次阅读 2016-12-20 16:18:18
    一:C++11特性初始化参数列表 C++11引入了一个新的初始化方式,称为初始化列表(List Initialize),具体的初始化方式如下: int i = {1}; int j{3}; 初始化列表在使用的时候如下一些要求: ...

    最近遇到了一个程序,一开始有些莫名其妙,最后经过思考、猜想、验证的过程,将其总结如下:

    首先先上代码:

    函数声明如下:

    class Controller
    {
        using AnalysisManager   = NST::analysis::AnalysisManager;
        using FiltrationManager = NST::filtration::FiltrationManager;
    
        class Running
        {
        public:
            inline Running(Controller&);
            Running()               = delete;
            Running(const Running&) = delete;
            Running& operator=(const Running&) = delete;
            inline ~Running();
    
        private:
            Controller& controller;
        };
    
    public:
        Controller(const Parameters&);
        Controller(const Controller&) = delete;
        Controller& operator=(const Controller&) = delete;
        ~Controller();
    
        int run();
    
    private:
        // initializer for global outptut
        utils::Out::Global gout;
        // initializer for global logger
        utils::Log::Global glog;
    
        // storage for exceptions
        RunningStatus status;
    
        // signal handler
        SignalHandler signals;
    
        // controller subsystems
        std::unique_ptr<AnalysisManager>   analysis;
        std::unique_ptr<FiltrationManager> filtration;
    };

    只看其构造函数:

    Controller::Controller(const Parameters& params) try
        : gout       {utils::Out::Level(params.verbose_level())}
        , glog       {params.log_path()}
        , signals    {status}
        , analysis   {}
        , filtration {new FiltrationManager{status}}
    {
        // clang-format on
        switch(params.running_mode())
        {
        case RunningMode::Profiling:
        {
            analysis.reset(new AnalysisManager{status, params});
            if(analysis->isSilent())
                utils::Out::Global::set_level(utils::Out::Level::Silent);
    
            filtration->add_online_analysis(params, analysis->get_queue());
        }
        break;
        case RunningMode::Dumping:
        {
            filtration->add_online_dumping(params);
        }
        break;
        case RunningMode::Analysis:
        {
            analysis.reset(new AnalysisManager{status, params});
            if(analysis->isSilent())
                utils::Out::Global::set_level(utils::Out::Level::Silent);
    
            filtration->add_offline_analysis(params.input_file(),
                                             analysis->get_queue());
        }
        break;
        case RunningMode::Draining:
        {
            filtration->add_offline_dumping(params);
        }
        break;
        }
        droproot(params.dropuser());
    }

    对于上述的构造函数,涉及到的几个知识点总结如下:

    一:C++11特性初始化参数列表

    C++11引入了一个新的初始化方式,称为初始化列表(List Initialize),具体的初始化方式如下:

    int i = {1};
    int j{3};

    初始化列表在使用的时候有如下一些要求:

    1. 当初始化内置基本类型的时候,列表初始化不允许出现隐式类型的转换,例如:

    long double ld = 3.1415926536;
    int a{ld}, b = {ld}; //出错,不允许出现精度的丢失
    int c(ld), d = ld; // 非列表初始化,但是会出现精度的丢失

    2. 初始化列表可以用于初始化结构体类型,例如:

    #include <iostream>
    
    struct Person
    {
      std::string name;
      int age;
    };
    
    int main()
    {
    	Person p = {"Frank", 25};
    	std::cout << p.name << " : " << p.age << std::endl;
    }

    3. 其他一些不方便初始化的地方使用,比如std<vector>的初始化,如果不使用这种方式,只能用构造函数来初始化,难以达到效果:

    	std::vector<int> ivec1(3, 5);
    	std::vector<int> ivec2 = {5, 5, 5};
    	std::vector<int> ivec3 = {1,2,3,4,5}; //不使用列表初始化用构造函数难以实现

    二:初始化列表的作用

    对于构造函数而言,初始化列表的作用无非是在对成员变量申请内存时进行初始化。执行构造函数时,先执行初始化表的内容,若初始化里面里面没有数据,侧编译器安装系统默认的方式对成员变量申请内存,进行系统默认的方式赋值,随后再进行构造函数中花括号内部的指令。

    A.对于引用型成员变量和const常量型成员变量,则必须通过初始化表初始化该成员变量。
    B.如果有类类型成员变量,而该类型又没有无参构造函数,则必须通过初始化表初始化该成员变量。
    C.需要在子类中指定其基类部分的初始化方式,必须使用初始化表。
    D.成员变量初始化顺序有声明顺序决定,而与初始化表的顺序无关。
    E.对于参数列表中所列的成员变量,可以不包含所有的成员变量。

    三:delete的作用

    为了能够显式的禁用某个函数,C++11 标准引入了一个新特性:deleted 函数。程序员只需在函数声明后加上“=delete;”,就可将该函数禁用。类 X 的拷贝构造函数以及拷贝赋值操作符声明为 deleted 函数,就可以禁止类 X 对象之间的拷贝和赋值




    
    
    展开全文
  • Error:多个 重载函数“sqrt”实例与参数列表匹配错误原因改正方式 #include <iostream> #include <math.h> #include <fstream> #include <iomanip> using namespace std; int main() { ...

    Error:有多个 重载函数“sqrt”实例与参数列表匹配

    #include <iostream>
    #include <math.h>
    #include <fstream>
    #include <iomanip>
    using namespace std;
    
    int main()
    {
    	int x1,y1,x2,y2;
    	while(cin>>x1>>y1>>x2>>y2)
    	{
    		double d;
    		d = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    		cout<<fixed<<setprecision(2)<<d<<endl;
    	}
    	system("pause");
    	return 0;
    }
    

    错误原因

    d为double类型,而后面的x1,y1,x2,y2均为int类型

    改正方式

    #include <iostream>
    #include <math.h>
    #include <fstream>
    #include <iomanip>
    using namespace std;
    
    int main()
    {
    	double x1,y1,x2,y2;
    	while(cin>>x1>>y1>>x2>>y2)
    	{
    		double a = x1-x2;
    		double b = y1-y2;
    		double d;
    		d = sqrt(a*a+b*b);
    		cout<<fixed<<setprecision(2)<<d<<endl;
    	}
    	system("pause");
    	return 0;
    }
    
    展开全文
  • def add(a,b=2): return a+b print(add(1)) print(add(2,3)) """ 3 5 """ 再比如 def add(a,b=1,c=2): return a+b+c print(add(5)) ...而如果带默认参数位于前面,则会报错 def add(a=1,b): return ...
    def add(a,b=2):
        return a+b
    
    print(add(1))
    print(add(2,3))
    """
    3
    5
    """

    再比如

    def add(a,b=1,c=2):
        return a+b+c
    
    print(add(5))
    """
    8
    """

    给a赋值5,a+b+c=8

    而如果带有默认参数位于前面,则会报错

    def add(a=1,b):
        return a+b
    
    print(add(5))
    """
    D:\Anaconda3\python.exe E:/Pycharm_prj/_Ex_/test.py
      File "E:/Pycharm_prj/_Ex_/test.py", line 1
        def add(a=1,b):
               ^
    SyntaxError: non-default argument follows default argument
    """
    展开全文
  • public BZL(String name, int age) { //有参数的构造方法 this.name = name; this.age = age; } public String getName() { //Getter/Setter方法 return name; } public void setName(String ...
  • js中的参数列表与参数数组

    千次阅读 2019-09-21 10:56:34
    JS中的函数中,其实一个“隐形”的东西来存储实参所有的实参,这个东西就是...1) 调用方法类似:都可以通过中括号下标的形式来访问具体某个参数。 2) length属性:直接可以获取实参的个数。 3) 和数组一...

    JS中的函数中,其实有一个“隐形”的东西来存储实参所有的实参,这个东西就是arguments对象。但在实际使用过程中它的使用方式和数组简直一模一样,用起来感觉就是数组,没有任何毛病,但实际上它并不是一个数组。

    arguments看起来,用起来都像是数组

    • 1) 调用方法类似:都可以通过中括号下标的形式来访问具体某个参数。

    • 2) 有length属性:直接可以获取实参的个数。

    • 3) 和数组一样,用中括号将内容包含起来。
      这里用一个简单的例子

    • 在控制台得到的结果如下

    • 在这里插入图片描述

    arguments到底是不是数组呢?

    我们从三个角度来验证下arguments是不是数组。
    1)如果是数组,就可以使用前面介绍过的数组的方法,比如用push函数给arguments插入一个元素。

    在这里插入图片描述

    控制台报错,所以arguments并不像正常的数组一样有push函数

    在这里插入图片描述

    2)正面确认下,用我们之前判断数组的方法来判断一下:在这里插入图片描述
    控制台输出flase:直接说明arguments不是数组。

    在这里插入图片描述

    3)使用toString查看

    在这里插入图片描述
    在这里插入图片描述

    从控制台直接打印出来的__proto__属性值就可以看出,arguments是Object。但是,这个arguments对象又跟我们看到的普通(正常)对象又有区别,因为一般的对象是大括号,而arguments对象是中括号,这一点又像数组。
    最后我们得出结论,arguments本质上是对象,而且是具有数组特性的对象,包括表现形式都用中括号。
    而其实类似arguments这种的,叫做类数组
    展开全文
  • C++中参数列表

    千次阅读 2019-07-11 09:56:58
    1)参数列表的初始化顺序和初始化列表列出的顺序无关,只与它在类中声明顺序有关 2) #include <stdio.h> #include <iostream> using namespace std; class Parent { public: int m_a; int m_b;...
  • Python参数列表

    千次阅读 2018-12-09 16:48:27
    星号*实现不定长参数列表,单个*表示将参数以tuple的形式传入,两个*表示将参数以dict的形式传入,前者传参不能指定参数,后者传参必须指定参数,且参数会被处理成str类型。 def f(*args, **kwargs): print "...
  • 项目中Service和dao层是分开俩个模块放的,在Service层中的方法本来俩个参数,增加到4个参数以后,在编译打包时候报错:实际参数列表和形式参数列表长度不同。 应该把Service层的项目maven install一下就可以,但是...
  • import java.util.*; class Person { private int age; public Person(){} // public Person(int age) { this.age = age; } public int getAge() { return this.age; } } public class TestFinalReference ...}
  • C++的参数列表

    千次阅读 2018-07-07 22:22:26
    C++的参数列表有函数的参数列表、宏定义的参数列表、模板的类型参数列表等。参数列表又可以分为形式参数列表和实际参数列表。例如: 在定义函数时函数头部所列的就是形式参数列表,在调用函数时所列的就是实际参数...
  • ...运行编译时报错:实际参数列表和形式参数列表长度不同。 错误提示:需要两个参数。实际传递了三个参数。 解决方法,service项目的pom文件Run As。Maven install。 原因:更改了接口参数
  • python 列表与函数参数

    万次阅读 2018-07-05 09:34:38
    这篇我们就来学习一下列表作为函数参数的使用。 首先我们看一个简单的场景:假如某一只球队在进行一场比赛,在比赛前很必要介绍一下各个队员的信息,这里我们就简单的模拟一下。 首先 我们定义三个运动员的信息...
  • class Person { String name; int age; public void Person(String name,int age){ this.name = name; this.age = age;... System.out.println("姓名"+ this.name +" 年龄"+ this.age);...
  • 项目中出现以下错误: C2664 “int CComboBox::InsertString(int,LPCTSTR)”: 无法将参数 2 从“const char [13]”转换为“LPCTSTR” ; C2440 “<function-style-cast&...没有与参数列表匹配的构造函数 "ATL:...
  • C++构造函数中用参数列表初始化成员

    万次阅读 多人点赞 2015-09-29 14:57:54
    C++构造函数中初始化成员参数列表初始化成员(必须的原因:对象成员的初始化,const修饰的成员的初始化,引用成员的初始化,子类调用父类的构造函数初始化父类成员)参数列表在构造函数执行之前执行,参数列表中执行...
  • 因为是maven分开几个jar来存放service,controller还有dao之类的,在添加了新的参数到service后,需要重新maven install。
  • main函数的参数和可变参数列表

    千次阅读 2018-04-28 17:47:24
    一般来说,我们写main函数,就定义main(),它的参数部分看似没有,实际上,main函数也是有参数的,只是在我们写时省略了。 main函数的参数由三部分组成,分别是argc(int型,表示命令行参数的个数)、argv[](char*...
  • 实际参数列表和形式参数列表长度不同
  • C++ 没有与参数列表匹配的构造函数 实例 参数类型为: (const char [12], Boy *) ``` #include #include using namespace std; class Boy:public Person{}; class Girl:public Person{ Girl(string ...
  • Java 可变参数列表

    千次阅读 2018-08-07 11:37:21
    如下代码,是实现可变参数列表的一种方式。 public static void printAry(Object[] objs){ for(Object obj:objs){ System.out.print(obj+&quot; &quot;); } System.out.println(); } ...
  • Python 列表&字典作为函数的参数

    千次阅读 2018-09-06 14:38:13
    这篇笔记主要记录,列表作为函数参数传递时的深浅拷贝问题 #!/usr/bin/env python # -*- coding: utf-8 -*- ''' 这篇笔记主要记录,列表作为函数参数传递时的深浅拷贝问题 ''' import copy def list_append(l=...
  • pow是double型的返回值,写错了就会这样的提示。 pow函数的重载如下: C++提供以下几种pow函数的重载形式: 1、double pow(double X,int Y); 2、float pow(float X,float Y); 3、float pow(float X,int Y); ...
  • Python函数默认参数为空列表

    千次阅读 2018-11-19 18:03:40
    函数add()第二次执行的时候,没有重新创建一个新的空列表对象,而是传入了第一次执行时创建的那个列表对象,原因是函数add()的参数是变量foo,foo储存的是第一次创建的列表的实体地址(python是根据变量中储存的实体...
  • 若将一个列表传入函数,则需要给列表指定指针。 主要代码如下: if __name__ == '__main__': list_rect = (508, 451, 730, 470, 718, 615, 495, 596) print(list_rect[1]) aa, bb, cc, dd = isPointInRect()....
  • python:如何传递一个列表参数

    千次阅读 2019-09-26 21:35:14
    转载于:https://www.cnblogs.com/gcgc/p/11426356.html
  • C#_可变长参数列表的使用

    千次阅读 2015-12-12 17:30:36
    static void Main(string[] args) { func(1, 2, 3); func1(1, 2, 3, "cxm"); Console.ReadLine(); } // 可变长参数列表特例1 private static void fu
  • 分析在C++中sqrt三种类型,参数分别为double,float,long double。n定义的参数类型是int型,而sqrt()中应该试用double型或者float型,编译器不知道我们要调用哪一个sqrt类型。因此,修改为sqrt(n*1.0) #...
  • rm提示参数列表过长的解决办法

    千次阅读 2016-01-17 16:52:07
    在linux中删除大量文件时,直接rm会出现:-bash: /bin/rm: 参数列表过长,的错误。  这时可以find命令来结合使用。  例:  1、rm * -rf 改为:   find . -name "*" | xargs rm -rf '*'...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,899,134
精华内容 759,653
关键字:

参数列表有什么用