小编rai*_*ner的帖子

调用函数从类中返回私有变量不起作用

所以我用C++制作一个小游戏,我遇到了一个问题.我在我的player.h文件中有一个名为player的类,在这个类中我有一个名为的公共函数getPotion().我还有一个名为的私有静态变量potion.我对玩家的健康状况完全相同,并且该getHealth()函数playerHealth完美地返回私有静态int .但由于显然没有理由,该getPotion功能不会返回魔药.我得到了一个错误.我还在所有其他文件中包含了头文件.

这是代码:

(对不起,我不知道如何插入代码,所以我必须写出来)

player.h(我遇到问题的代码):

class Player{
private:
    static int potions;

public:
    int getPotions();
}
Run Code Online (Sandbox Code Playgroud)

player.cpp(我遇到麻烦的代码):

int Player::potions;

int Player::getPotions(){
    Player player;
    return player.potions;
}
Run Code Online (Sandbox Code Playgroud)

我可能遗漏了一些代码,比如return等等,但那是因为我有一点时间问这个问题,所以我把那些与我的问题相关的部分.

c++

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

在函数调用中临时:UB?

根据以下答案考虑以下代码:

#include <iostream>
#include <sstream>

class StringBuilder {
public:
    template <typename T> inline StringBuilder &operator<<(T const &t) {
        ss << t;
        return *this;
    }

    inline char const * c_str() {
        return ss.str().c_str();
    }

private:
    std::stringstream ss;
};

void foo(const char *x) {
    std::cout << x << std::endl;
}

int main() {
    foo((StringBuilder() << "testing " << 12 << 3 << 4).c_str());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

foo()使用临时StringBuilder的返回值调用是否会以任何方式导致UB?

我问的原因是上面的例子效果很好,但在现实生活中,我使用的是一个库,其中包含日志工具,使用这个库我会得到不正确的输出(日志功能需要我的char*正确但在内部覆盖它,这使我相信内存不再有效).

c++ undefined-behavior language-lawyer

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

表达式的类型

考虑一下C++程序的以下部分; 打印到控制台的值作为注释给出.

{ // case 1
unsigned int x = 10; 
unsigned int y = 20; 
std::cout << "u/u x - y: " << x-y << std::endl; // 4294967286
}   

{ // case 2
int x = 10; 
int y = 20; 
std::cout << "s/s x - y: " << x-y << std::endl; // -10
}   

{ // case 3
unsigned int x = 10; 
int y = 20; 
std::cout << "u/s x - y: " << x-y << std::endl; …
Run Code Online (Sandbox Code Playgroud)

c c++ language-lawyer

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

Python:使用属性覆盖成员?

我试图用属性覆盖Python(2.7)类的成员,如下面的代码所示:

class Base:
    def __init__(self):
        self.foo = 1

class Derived(Base):
    foo = property(lambda self: 2)

print Derived().foo
Run Code Online (Sandbox Code Playgroud)

但是,最后一行打印1而不是2.从我认为属性应该工作的方式(即,稍后可以轻松地将成员更改为函数),这对我来说似乎是违反直觉的.我错过了什么吗?有一些解决方法吗?

python inheritance properties

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