源代码如下.
cout << '\\' << endl; //OK, output is \
cout << '\\\\' << endl; //OK, output is an integer 23644, but why?
Run Code Online (Sandbox Code Playgroud)
该语句cout << '\\\\' << endl;调用类的以下函数ostream.
_Myt& __CLR_OR_THIS_CALL operator<<(int _Val)
Run Code Online (Sandbox Code Playgroud)
我知道写表达式很奇怪'\\\\',但我不明白它为什么不会失败.如何解释结果?
一个vector<int>(v1)表达式产生一个临时对象,并且可以在右侧放operator=,但如果我们用一个vector<int>(v1)表达式作为一个声明,它会在Visual Studio 2010 10.0.30319.1 RTMRel失败.详细错误信息位于以下代码的注释中.为什么会这样?
vector<int> v1;
v1.push_back( 10 );
v1.push_back( 20 );
v1.push_back( 30 );
vector<int> v3 = vector<int>(v1); //OK, deliberately code like this.
vector<int>(v1); //error C2086: “std::vector<_Ty> v1”: redefinition
Run Code Online (Sandbox Code Playgroud)
在"C++编码标准:101规则,指南和最佳实践"一书中,第82章"使用公认的习语真正缩小容量并真正擦除元素".有一个声明:
container<_Type>(c).swap(c);
Run Code Online (Sandbox Code Playgroud)
我不明白,只想测试container<_Type>(c),这是什么意思?
在我看来,它们是一样的。但在 Visual Studio 2015 中,它们绝对不同。
//Ok, work properly
multiset<int, greater<int> > ms1;
ms1.insert(10);
ms1.insert(20);
//error, why?
multiset<int> ms2(greater<int>());
ms2.insert(30);
ms2.insert(40);
Run Code Online (Sandbox Code Playgroud)
我不知道为什么?