"func"は引数としてクラスCの定数参照をとります。 しかし、私は間違ってそれに文字列を渡した。無効な型引数を渡しても、このコードをエラーなしでコンパイルできますか?
"no matching function ..." "no known conversion from ..."のようなエラーが発生することが予想されますが、コンパイルはエラーなしで完了し、プログラムはセグメンテーション違反を取得します。
関数の引数が間違っていても、コンパイラがエラーを引き起こさないのはなぜですか?あなたはstd::string
からC
を作ることができるコンストラクタを持っているので、それはfunc(C(_s))
であるかのように、コンパイラ 打ち鳴らす++ 3.9.1 G ++ 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'を要求しているものに渡しています。あなたはテンプレート関数をお探しですか? – tadman