为什么我们需要在我们的Facebook应用程序中添加这些标签.这对标签的用途是什么.我创建了一个使用apprequest的应用程序,即使我没有在我的脚本前面添加这些标签,它也能正常工作.所以我真的很想知道为什么我们需要添加它们.谢谢.
std::pair有两个构造函数:
pair( const T1& x, const T2& y );
Run Code Online (Sandbox Code Playgroud)
template< class U1, class U2 >
pair( U1&& x, U2&& y );
Run Code Online (Sandbox Code Playgroud)
我从《Effective Modern C++》中学到了通用参考,并且知道为什么需要 #2 以及它是如何工作的。但我不明白为什么仍然需要 #1 并认为 #2 可以 100% 取代 #1。我相信我一定错过了一些关键的知识。
我有一个旧项目需要维护,它使用了 const char * 。由于某种原因,我想保留大量运行时生成的字符串。所以我创建一个全局变量 std::set 来保存这些字符串。当生成一个新字符串时,除了添加到集合中之外,我还会返回并发送 newString.c_str() ,该字符串将保存在其他地方。例如。
std::set<std::string> g_stringDB;
void ArchieveString( AStruct *container, const char *temporaryString )
{
auto it = g_stringDB.emplace( temporaryString );
container->validString = it->first->c_str();
}
Run Code Online (Sandbox Code Playgroud)
我想知道容器何时被外部使用(我的意思是此功能之外的任何地方)。如果指针:validString仍然安全。由于集合内发生的复制、构造,指针是否有可能已经指向其他内容?如果不是,实现这一要求的理想方法是什么?
有没有人可以帮助解释为什么UseString在我的以下示例中不能接受左值作为参数?我知道String在我的情况下创建了一个临时文件,但我无法解释为什么它必须在这里接受一个右值。
#include <utility>
using namespace std;
struct String
{
String(const char* cstr)
{
}
};
struct UseString
{
UseString(const String& str)
{
}
};
int main()
{
const char* cstr = "abc";
UseString(std::move(cstr)); //Correct
UseString("abc"); // Correct
UseString(cstr); // Error but why UseString cannot accept lvalue as parameter in this case?
return 0;
}
Run Code Online (Sandbox Code Playgroud)