編輯:繼Mike Seymour的評論之後,我用operator char *() const;
替換operator std::string() const;
,並相應地更改了實現。這允許隱式轉換,但由於某些原因,無符號long int運算符優先於char *運算符,這只是感覺不正確......另外,我不想在c類,當我有std :: string。我有一個預感,我的CustomizedInt類需要從一些東西繼承,以支持我期望的功能。有沒有人請詳細說明Mike對std::basic_string
的評論?我不確定我是否理解正確。C++隱式轉換運算符優先級
我有這樣一段代碼:
#include <string>
#include <sstream>
#include <iostream>
class CustomizedInt
{
private:
int data;
public:
CustomizedInt() : data(123)
{
}
operator unsigned long int() const;
operator std::string() const;
};
CustomizedInt::operator unsigned long int() const
{
std::cout << "Called operator unsigned long int; ";
unsigned long int output;
output = (unsigned long int)data;
return output;
}
CustomizedInt::operator std::string() const
{
std::cout << "Called operator std::string; ";
std::stringstream ss;
ss << this->data;
return ss.str();
}
int main()
{
CustomizedInt x;
std::cout << x << std::endl;
return 0;
}
哪個打印 「被叫運營商unsigned long int類型; 123」。我的問題是這些:
- 我刪除了操作符unsigned long int後,爲什麼我需要明確地將x轉換爲std :: string?爲什麼不直接調用隱式轉換運算符(std :: string)?
- 是否有任何文檔解釋哪些隱式轉換被允許以及哪些是它們的優先順序?看來,如果我將運算符unsigned int與運算符unsigned long int一起添加到此類中,則會收到關於運算符<的模糊性的編譯器錯誤...另外,我知道定義這樣的運算符可能是可憐的練習,但我不確定我完全理解相關的注意事項。有人可以請他們概述一下嗎?僅僅定義公共方法ToUnsignedLongInt和ToString會更好嗎?
這是相關的:[通過隱式轉換爲字符串流式傳輸對象時的重載分辨率失敗](http://stackoverflow.com/questions/6677072/overload-resolution-failure-when-streaming-object-via-implicit-conversion to-str) – 2012-04-23 18:16:51
@Als:讓我們慢慢來...我還沒有準備好潛入模板:) – 2012-04-23 18:40:46