首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C++为什么使用参数化构造函数时竟然没有编译错误?

C++为什么使用参数化构造函数时竟然没有编译错误?

提问于 2018-02-06 16:24:08
回答 2关注 0查看 841

我已经生成了下面的示例代码来说明我的问题:

代码语言:txt
AI代码解释
复制
#include <string>
#include <iostream>

class MyException
{
    public:
        MyException(std::string s1) {std::cout << "MyException constructor, s1: " << s1 << std::endl;}
};

int main(){
    const char * text = "exception text";
    std::cout << "Creating MyException object using std::string(const char *)." << std::endl;
    MyException my_ex(std::string(text));
    std::cout << "MyException object created." << std::endl;
    //throw my_ex;

    std::string string_text("exception text");
    std::cout << "Creating MyException object using std::string." << std::endl;
    MyException my_ex2(string_text);
    std::cout << "MyException object created." << std::endl;
    // throw my_ex2;

    return 0;
}

此代码段编译时没有任何错误,并产生以下输出:

代码语言:txt
AI代码解释
复制
 $ g++ main.cpp
 $ ./a.out
Creating MyException object using std::string(const char *).
MyException object created.
Creating MyException object using std::string.
MyException constructor, s1: exception text
MyException object created.

请注意,对于my_ex我定义的构造函数没有被调用。接下来,如果我真的想抛出这个变量:

代码语言:txt
AI代码解释
复制
throw my_ex;

我得到一个编译错误:

代码语言:txt
AI代码解释
复制
 $ g++ main.cpp
/tmp/ccpWitl8.o: In function `main':
main.cpp:(.text+0x55): undefined reference to `my_ex(std::string)'
collect2: error: ld returned 1 exit status

如果我在转换前后添加大括号,如下所示:

代码语言:txt
AI代码解释
复制
const char * text = "exception text";
std::cout << "Creating MyException object using std::string(const char *)." << std::endl;
MyException my_ex((std::string(text)));
std::cout << "MyException object created." << std::endl;
throw my_ex;

然后它就像我所期望的那样起作用了:

代码语言:txt
AI代码解释
复制
 $ g++ main.cpp
 $ ./a.out
Creating MyException object using std::string(const char *).
MyException constructor, s1: exception text
MyException object created.
terminate called after throwing an instance of 'MyException'
Aborted (core dumped)

我有以下问题:为什么我的第一个示例要编译?为什么我没有编译错误?

回答 1

死者是小智

发布于 2017-11-27 06:48:39

稍等下把 可能客服大佬在忙

和开发者交流更多问题细节吧,去 写回答
相关文章
关于MySQL连接抛出Authentication Failed错误分析
    1.只有用Connector/NET 出现这个问题, 用JDBC驱动没有类似问题。     2.多台应用服务器,只有一台报这个错,因此可以排除服务器端的问题。     3.问题非常随机,重启一下服务器/IIS,就能临时解决问题。     4.有一些场景应用服务器CPU并不是很高,也会偶尔抛出这个错来。
星哥玩云
2022/08/17
1.1K0
关于MySQL连接抛出Authentication Failed错误分析
PHP 报500 内部错误不抛出错误信息
访问其余文件能正常访问,只是在某个分组下事出现了500错误,主要是没抛出具体的错误信息。
槽痞
2020/06/23
2K0
Python学习 Day 11 错误处理 try 调用堆栈 记录错误 抛出错误
在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见。比如打开文件的函数open(),成功时返回文件描述符(就是一个整数),出错时返回-1。
统计学家
2019/04/10
1.1K0
[Node.js]在windows下不得不防的小错误
Node.js中的两个模块Socket.io 和Express做整合的时候出现了下面的错误:
全栈程序员站长
2022/07/12
7880
nodejs显现events.js:72抛出错误
1. 需改nodejs中的侦听port。如将默认的80port改成8080port;
全栈程序员站长
2022/01/14
9100
Golang学习笔记之错误处理error、panic (抛出错误),recover(捕获错误)
错误表示程序中出现了异常情况。Go 语言通过内置的错误接口提供了非常简单的错误处理机制。
李海彬
2018/12/28
1.8K0
Golang学习笔记之错误处理error、panic (抛出错误),recover(捕获错误)
如何找到抛出ORA-00933错误的SQL
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bisal
2019/11/20
2.6K0
如何找到抛出ORA-00933错误的SQL
使用express-validator对你的Express应用的用户数据进行验证
开发web应用时,我们总是需要对用户的数据进行验证,这包括客户端的验证以及服务端的验证,仅仅依靠客户端的验证是不可靠的,毕竟我们不能把所有的用户都当成是普通用户,绕过客户端的验证对于部分用户来说并不是什么难事,因此所有数据应该在服务端也进行一次验证。Express应用可以通过express-validator进行数据验证,这样就不必自己烦琐的为每一个数据单独写验证程序(过来人告诉你这感觉简直糟透了)。
用户1515472
2019/07/24
2.9K0
窥探Swift编程之错误处理与异常抛出
在Swift 2.0版本中,Swift语言对其错误处理进行了新的设计,当然了,重新设计后的结果使得该错误处理系统用起来更爽。今天博客的主题就是系统的搞一下Swift中的错误处理,以及看一下Swift中是如何抛出异常的。在编译型语言中,错误一般分为编译错误和运行时错误。我们平时在代码中处理的错误为运行时错误,我们对异常进行处理的操作的目的是为了防止程序出现错误而导致其他的副作用,比如用户数据未保存等等。 在今天的博客中,先给出主动产生异常的几种情况,然后再给出如何处理被动异常。 一、主动退出程序的几种情况 在
lizelu
2018/01/11
2.3K0
窥探Swift编程之错误处理与异常抛出
编写可维护代码3:适当的抛出错误提示
在js开发中,调试错误是一个比较头疼的事,又不像java的debug那么方便,定位错误往往不是那么容易,除非对代码熟悉无比,但即使是自己写的代码,功能一复杂,时间一长,再想快速定位问题,至少我现在是比较头疼的。此时,如果有一个比较友好的错误提示,那解决问题的效率将大大提高。
前端_AWhile
2019/08/29
1.1K0
Express4.x API (三):Response (译)
Express4.x API 译文 系列文章 技术库更迭较快,很难使译文和官方的API保持同步,更何况更多的大神看英文和中文一样的流畅,不会花时间去翻译--,所以我们看到express中文网更多的还是
okaychen
2018/01/05
1.6K0
【JAVA调错】----JBoss发布多个项目时抛出webAppRootKey错误
进行如上配置后,修改log4j.xml后,在刷新间隔时间后,配置的监听器Log4jConfigListener会重新加载log4j相关配置。
令仔很忙
2018/09/14
1.1K0
Express 框架
以下实例中我们引入了 express 模块,并在客户端发起请求后,响应 "Hello World" 字符串。
acc8226
2022/09/30
2.3K0
Python抛出异常_python抛出异常的作用
在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误
全栈程序员站长
2022/11/02
2.6K0
express 与 express-generator
其实express只是一个框架,那么npm install -g express 也仅仅是安装了这个框架,其作用是自己构建express项目的时候,库已经可以引用了。
bear_fish
2018/09/19
2.4K0
如何从Node.js开始-Visual Studio2017
好吧,简单地说,Node.js是一个服务器框架,可以在Windows,Linux,Unix,Mac OS X等各种平台上运行。它是开源的。
ccf19881030
2020/08/17
3K0
如何从Node.js开始-Visual Studio2017
【C++ 语言】异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )
1. 异常处理 : 使用 " try{}catch(){} " 将抛出异常的代码包起来 , 注意将可能抛出异常的代码包裹在 try 后的大括号中 , 将异常处理逻辑放在 catch 后的大括号中 ;
韩曙亮
2023/03/27
1.4K0
node Express 框架
Express事实上Node内置的http模块上构建的一层抽象。理论上所有Express实现的功能都能用Node实现
mySoul
2018/07/29
5.3K0
点击加载更多

相似问题

Express res.sendfile抛出禁止错误

40

express js错误:"express已弃用res.sendfile:请改用res.sendFile“

30

在Express中收听res.sendFile错误

26

Express res.sendFile未上载CSS

137

express.static对res.sendFile

23
相关问答用户
腾讯云TDP | TDP会员擅长3个领域
平安资管 | 架构师擅长4个领域
擅长3个领域
擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档