class Test {
public:
int n1;
};
Test func() {
return Test();
}
int main() {
func() = Test();
}
Run Code Online (Sandbox Code Playgroud)
这对我来说没有意义.如何以及为什么允许这样做?是不确定的行为?如果函数返回一个rvalue,那么如何将rvalue设置为另一个rvalue呢?如果我尝试使用任何原始类型,它会给我一个像我期望的错误.
我知道左值是内存中的一个位置,创建临时左值(rvalue?)并将其赋值给另一个左值的函数也是如此?有人可以解释这种语法的工作原理吗
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.我希望有人可以为我解决这个问题.
我在Google或SO上找不到任何真正的东西。我不知道是因为它不常见,还是因为我使用了错误的字词进行搜索。我在这里阅读了这个问题,但并没有真正回答我的问题。
因此,我正在尝试在C ++的SDL之上构建一个库。现在,我似乎无法弄清楚的是如何使使用我的库的项目与SDL文件完全独立,除了dll。
制作图书馆时,我与SDL2.lib和链接SDL2main.lib。我将所有SDL头文件都包含在我的库文件中。构建时,它会生成我的库文件;GGL.lib。
但是,当我想在另一个项目中测试我的库时,我必须包括所有SDL头文件,因为在我的项目中Window.h,它包括SDL.h。我想知道是否有什么办法可以使我的库头文件独立于SDL而不是SDL dll。
我想看看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.我不知道我现在是否只是无知而且不完全了解这里发生的事情,或者是否有什么问题.
我试着寻找答案,但到目前为止还没有运气.我的问题是 - 为什么引用变量在定义时需要初始化?这是技术原因,还是标准不允许的?
以此代码为例:
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)
为什么编译器不能像未初始化的指针一样处理未初始化的引用变量?这里有什么我想念的吗?
我刚刚学习了函数指针,并且要声明一个函数指针,你必须*在括号中添加指针名称,以确保它不返回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的大小?我知道有类似的问题,但到目前为止我还没有运气.
我读到Java不支持运算符重载.然后它让我想知道如何在Integer类的实例上使用increment运算符.
Integer number = new Integer(10);
System.out.println(++number);
Run Code Online (Sandbox Code Playgroud)
上面的代码编译正常,没有错误.但是,假设我创建了自己的类,只有一个成员变量(整数),并尝试使用increment运算符.它会给我一个编译器错误.为什么是这样?