c++ - 构造函数中的 Const 参数导致 stackoverflow

标签 c++ constructor stack-overflow constants

我在 VS2005 C++ 编译器中发现了这种奇怪的行为。这是情况:

我无法发布代码,但情况很简单。

这是初始代码:它完美地工作

class Foo {
     public:
     Foo(Bar &bar) { ... }
}

构造函数实现存储了一个引用,设置了一些成员……确实没什么特别的。

如果我按以下方式更改代码:

class Foo {
     public:
     Foo(const Bar &bar) { ... }
}

我已经为唯一的构造函数例程参数添加了一个 const 限定符。

它编译正确,但编译器输出警告说例程 Foo::Foo 将导致堆栈溢出(即使执行路径没有构造任何对象 Foo);这实际上发生了。

那么,为什么没有 const 参数的代码可以完美运行,而带有 const 限定符的代码却导致堆栈溢出?什么会导致这种奇怪的行为?

最佳答案

尝试使用 explicit 关键字?

我的猜测是,使用 const,您将声明从 Bar 到 Foo 的自动转换;如果您已经有任何类似的从 Foo 到 Bar 的自动转换,那么会溢出吗?

关于c++ - 构造函数中的 Const 参数导致 stackoverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2934395/

相关文章:

c++ - Thrift IDL 中的列表语法

c# - 为什么在创建带参数的构造函数时默认的无参数构造函数消失

c++ - 具有编译时初始化的常量数据容器类

c++ - 关于c++中 "this"指针的问题

visual-studio-2010 - 当抛出堆栈溢出异常时在 Visual Studio 2010 中查看 CallStack

android 注释 MyTask_(Context) 在 MyTask_ 中具有私有(private)访问权限

c++ - 将构造函数转发给成员对象

python - __init__ 作为构造函数?

C#、异步套接字服务器/客户端、StackOverflowException

android - 2 EditText + 2 TextWatcher - 计算器错误