小编Gru*_*urs的帖子

模运算符(%)给出不同的结果

鉴于此示例:

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++ c++11

6
推荐指数
1
解决办法
356
查看次数

C++:将类型为const char*的字符串文字传递给字符串参数

我是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*?

c++ string const-char

5
推荐指数
1
解决办法
1784
查看次数

错误地使用std :: move()?

下面是一段代码我如何通过我的游戏选项实现链接列表与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对象被实例化.我认为这更有效,因为较少的对象被实例化为相同的操作(将它们添加到向量)

c++ c++11

1
推荐指数
1
解决办法
144
查看次数

标签 统计

c++ ×3

c++11 ×2

const-char ×1

string ×1