小编Gre*_*g M的帖子

将从函数返回的Rvalue分配给另一个Rvalue

class Test {

public:

    int n1;

};

Test func() {

    return Test();

}

int main() {

    func() = Test();

}
Run Code Online (Sandbox Code Playgroud)

这对我来说没有意义.如何以及为什么允许这样做?是不确定的行为?如果函数返回一个rvalue,那么如何将rvalue设置为另一个rvalue呢?如果我尝试使用任何原始类型,它会给我一个像我期望的错误.

我知道左值是内存中的一个位置,创建临时左值(rvalue?)并将其赋值给另一个左值的函数也是如此?有人可以解释这种语法的工作原理吗

c++ rvalue lvalue-to-rvalue c++11

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

为什么不能将int(表示ASCII字符)强制转换为std :: string而没有用int括起来的花括号?

int main() {

    std::string A;
    A += (std::string)65;
    std::cout << A;

}
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用.它会抛出编译器错误.但下面的代码有效.

int main() {

    std::string A;
    A += (std::string){65};
    std::cout << A;

}
Run Code Online (Sandbox Code Playgroud)

当我用花括号包裹65时,它被解释为像我想要的那样的ASCII A,但没有花括号,程序不起作用.我也尝试在括号中放入多个数字,如下所示:

int main() {

   std::string A;
   A += (std::string){65, 66};
   std::cout << A;

}
Run Code Online (Sandbox Code Playgroud)

这将打印出AB.我希望有人可以为我解决这个问题.

c++ string casting

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

如何使基于SDL构建的库不需要SDL头文件

我在Google或SO上找不到任何真正的东西。我不知道是因为它不常见,还是因为我使用了错误的字词进行搜索。我在这里阅读了这个问题,但并没有真正回答我的问题。

因此,我正在尝试在C ++的SDL之上构建一个库。现在,我似乎无法弄清楚的是如何使使用我的库的项目与SDL文件完全独立,除了dll

制作图书馆时,我与SDL2.lib和链接SDL2main.lib。我将所有SDL头文件都包含在我的库文件中。构建时,它会生成我的库文件;GGL.lib

但是,当我想在另一个项目中测试我的库时,我必须包括所有SDL头文件,因为在我的项目中Window.h,它包括SDL.h。我想知道是否有什么办法可以使我的库头文件独立于SDL而不是SDL dll

c++ sdl header static-libraries

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

无论情况如何,字符串比较的Less Than运算符都会产生相同的结果

我想看看Less Than运算符(<)是否适用于字符串.嗯,确实如此.我开始尝试它,事实证明,无论坐姿如何,我都得到了相同的结果.左边的字符串总是小于右边的字符串,即使我交换了字符串.好奇为什么会这样做,我试着查看<操作员实际上为字符串做了什么.我读到它对两个字符串进行了字典比较.尽管如此,这并没有回答为什么我的代码正在做它正在做的事情.例如:

int main () {

if ("A" < "B")
    std::cout << "Yes";
else
    std::cout << "No";

return 0;

}
Run Code Online (Sandbox Code Playgroud)

它会输出Yes.那讲得通.但是当我交换字符串时:

int main () {

if ("B" < "A")
    std::cout << "Yes";
else
    std::cout << "No";

return 0;

}
Run Code Online (Sandbox Code Playgroud)

它仍然会输出Yes.我不知道我现在是否只是无知而且不完全了解这里发生的事情,或者是否有什么问题.

c++ string operators string-comparison

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

为什么需要在定义时初始化引用变量?

我试着寻找答案,但到目前为止还没有运气.我的问题是 - 为什么引用变量在定义时需要初始化?这是技术原因,还是标准不允许的?

以此代码为例:

int number = 42;
int& numberRef;
numberRef = number;
Run Code Online (Sandbox Code Playgroud)

以上是不允许的,但下面的代码是:

int number = 42;
int& numberRef = number;
Run Code Online (Sandbox Code Playgroud)

为什么编译器不能像未初始化的指针一样处理未初始化的引用变量?这里有什么我想念的吗?

c++ standards initialization reference

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

int(*p)和int*p之间有区别吗?

我刚刚学习了函数指针,并且要声明一个函数指针,你必须*在括号中添加指针名称,以确保它不返回int *.

两者之间有区别吗?

int *p
Run Code Online (Sandbox Code Playgroud)

int (*p)
Run Code Online (Sandbox Code Playgroud)

我尝试用cdecl查找,但到目前为止没有运气.cdecl说这是一回事,但没有提供解释.如果我宣布

short (*p)
Run Code Online (Sandbox Code Playgroud)

那会是一个短指针还是一个短指针?将p具有2个字节或4的大小?我知道有类似的问题,但到目前为止我还没有运气.

c++ pointers

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

如果Java不支持运算符重载,则increment运算符如何在Integer实例上工作?

我读到Java不支持运算符重载.然后它让我想知道如何在Integer类的实例上使用increment运算符.

Integer number = new Integer(10);
System.out.println(++number);
Run Code Online (Sandbox Code Playgroud)

上面的代码编译正常,没有错误.但是,假设我创建了自己的类,只有一个成员变量(整数),并尝试使用increment运算符.它会给我一个编译器错误.为什么是这样?

java oop operator-overloading increment

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