鉴于此示例:
std::vector<int> numbers = {5,6,7}; //size is 3
int i = -1;
std::cout << i % 3 <<"\n"; // output: -1
std::cout << i % numbers.size() << "\n"; // output: 0
Run Code Online (Sandbox Code Playgroud)
基本上在两个语句中我处理-1%3但编译器输出不同的数字.我不明白这个结果,也许有人可以向我解释.
编辑: @ Chris,@ Keith Thompson @AnT建议片段
std::cout << std::numeric_limits<std::size_t>::max() % 3 <<"\n"; //output: 0
std::cout << i % numbers.size() << "\n"; // output: 0
Run Code Online (Sandbox Code Playgroud)
打印预期的输出.感谢大家的有益建议!
我是c ++的新手,并且缺乏理解为什么这段代码运行良好:
string GetString(string promt)
{
cout << promt << ": ";
string temp;
getline(cin, temp);
return temp;
}
int main()
{
string firstName = GetString("Enter your first name");
string lastName = GetString("Enter your last name");
cout<< "Your Name is: " << firstName << " " << lastName;
cin.ignore();
cin.get();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
像"bla"这样的字符串文字是类型const char*.至少auto i ="bla"; 表示我是Type"const char*".为什么可以将它传递给GetString-Function,因为函数需要一个字符串而不是一个const char*?
下面是一段代码我如何通过我的游戏选项实现链接列表与currentElem指针进行遍历.这段代码运行良好.但是,出于测试目的,我从OptionElem-Class的析构函数写入LogFile,因此我可以计算已经实例化了多少个OptionElem对象.日志文件中有9个Entrys.所以9个对象已被实例化并被破坏.我只期望3个对象(e1,e2和e3),因为我在GameState构造函数中实例化了一次,然后将它们移动到optionElems-vector.我不明白其他6个OptionElem对象的实例化位置.
#include "OptionElem.h"
#include <vector>
class GameState
{
std::vector<OptionElem> optionElems;
OptionElem* currentElem;
public:
GameState();
};
GameState::GameState()
{
OptionElem e1("Start Game");
optionElems.push_back(std::move(e1));
OptionElem e2("Options");
optionElems.push_back(std::move(e2));
OptionElem e3("Exit");
optionElems.push_back(std::move(e3));
optionElems[0].Connect(optionElems[1]);
optionElems[1].Connect(optionElems[2]);
currentElem = &optionElems[0];
}
Run Code Online (Sandbox Code Playgroud)
编辑:我改变了行
OptionElem e1("Start Game");
optionElems.push_back(std::move(e1));
Run Code Online (Sandbox Code Playgroud)
至:
optionElems.emplace_back("Start Game");
Run Code Online (Sandbox Code Playgroud)
并对sftrabbit建议的下面的类似代码进行了相同的更改,并且Logfile更改为3个条目,因此在使用emplace_back方法而不是将局部变量移动到向量时,只有3个OptionElem对象被实例化.我认为这更有效,因为较少的对象被实例化为相同的操作(将它们添加到向量)