我在 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/