所以,sizeof(X)不能由程序員來賦予一個不同的新意義,以免違反基本的語法。
在N::m中,無論N還是m都不是值的表達式;N和m是編譯器知道的名字,::執行一個(編譯期的)范圍解析,而不是表達式求值。你可以想象一下,允許重載x::y的話,x可能是一個對象而不是一個名字空間(namespace)或者一個類,這樣就會導致——與原來的表現相反——產生新的語法(允許 表達式1::表達式2)。很明顯,這種復雜性不會帶來任何好處。
理論上來說,.(點運算符)可以通過使用和->一樣的技術來進行重載。但是,這樣做會導致一個問題,那就是無法確定操作的是重載了.的對象呢,還是通過.引用的一個對象。例如:
class Y {
public:
void f();
// ...
};
class X { // 假設你能重載.
Y* p;
Y& operator.() { return *p; }
void f();
// ...
};
void g(X& x)
{
x.f(); // X::f還是Y::f還是錯誤?
}
這個問題能夠用幾種不同的方法解決。在標準化的時候,哪種方法最好還沒有定論。更多的細節,請參見《C++語言的設計和演變》。
怎樣將一個整型值轉換為一個字符串?
最簡單的方法是使用一個字符串流(stringstream):
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
string itos(int i) // 將int轉換成string
{
stringstream s;
s << i;
return s.str();
}
int main()
{
int i = 127;
string ss = itos(i);
const char* p = ss.c_str();
cout << ss << " " << p << "\n";
}
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/