在我的代碼中,我創建了一個類,該類使用運算符< <來接收變量並相應地處理這些變量。爲了簡潔起見,省略類內部的確切邏輯。無法使用operator <<作爲匿名對象
,我要面對的問題是,當我嘗試創建對象的一個匿名實例,並使用直接與(< <)運營商,大多數編譯器會抱怨 - 沿東西線(無匹配「操作< <」)
從我的理解,直接調用類(的TestObject())是合法的表達式,它應該實例化被傳遞到操作的匿名對象。
欣賞你爲什麼不編譯的想法?
typedef unsigned int uint32;
class TestObject
{
public:
TestObject()
: mValue(0)
{
}
uint32 GetValue() const
{
return mValue;
}
private:
uint32 mValue;
};
template <typename T>
TestObject& operator<<(TestObject& o, const T& t)
{
return o;
}
void TestObjectTest()
{
TestObject myTestObject;
uint32 newValue = 123;
const uint32 resultValue = (myTestObject << newValue).GetValue(); // This compiles for both visual studio 2013 and gcc.
const uint32 resultValue2 = (TestObject() << newValue).GetValue(); // Compiles using visual studio 2013, but does not compile using x86-64 gcc 6.2: "no match for 'operator<<' in 'TestObject() << newValue'
}
int main(void)
{
TestObjectTest();
return 0;
}
你不應該是能夠結合臨時到非const引用我很驚訝在VS – Borgleader