次のように呼び出されることを区別できる関数に遭遇しました
foo("bar");
対
const char *bob = "bar";
foo(bob);
私が考えた可能性は次のとおりです。
- 文字列のアドレス: 両方の引数がイメージの .rdata セクションにありました。同じプログラムで両方の呼び出しを行うと、両方の呼び出しが同じ文字列アドレスを受け取ります。
- RTTI: RTTI を使用してそのような違いを検出する方法がわかりません。
私が思いつく唯一の実用的な例は次のとおりです。
void foo(char *msg)
{
printf("string literal");
}
void foo(const char *&msg)
{
printf("string pointer");
}
foo("bar"); // "string literal"
const char *soap = "bar";
foo(soap); // "string pointer"
関数のコードにアクセスできず、ヘッダー ファイル内の宣言から 1 つの関数宣言しか明らかになりませんでした。