gpt4 book ai didi

c++ - 为什么即使我传递了一个无效的类型参数,我也可以毫无错误地编译这段代码?

转载 作者:行者123 更新时间:2023-11-27 22:46:07 25 4
gpt4 key购买 nike

"func"将类 C 的常量引用作为其参数。但是我错误地将字符串传递给了它。

我预计会出现“没有匹配的函数...”“没有已知的来自...的转换”之类的错误,但编译已完成且没有任何错误,并且程序出现段错误。

为什么即使函数的参数不正确,编译器也不会导致错误?

编译器版本铛++ 3.9.1g++ 6.3.1

#include <iostream>
#include <string>

class C ;

void func( const C &_c )
{}

class C
{
public :
C( const std::string &_s )
{
func( _s ) ;
}
} ;

int main()
{
C c( "foo" ) ;
}

最佳答案

因为你有一个可以从 std::string 生成 C 的构造函数,它基本上将你的 func( _s ) 编译为如果它是 func( C( _s ) )。对我们来说很明显,这只会导致无限递归并使您的程序崩溃(因为该函数就是您现在所在的函数),但从技术上讲它不是无效的 C++,因此编译器允许它。如果您不希望它起作用,您可以声明您的构造函数 explicit,这意味着除非您显式调用它,否则编译器永远不会使用它。

关于c++ - 为什么即使我传递了一个无效的类型参数,我也可以毫无错误地编译这段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42686720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com