在下面的代码中,是正确创建的返回值。我有一些疑问,因为这对构造函数的两个参数都是相关的。第二个参数使用move是否会破坏第一个参数。或者如果第一个参数总是在第二个参数之前创建:
class A
{
private:
struct B
{
int a;
string b;
int c;
};
struct C
{
double d;
float f;
};
标题问题是指1990年前后引入模板的C++标准中的设计决策。
为什么设计者使用<> (尖括号)而不是() (圆括号)?这样做可以使许多程序员避免与位移位相关的错误。
std::vector<std::vector<int>> // does not work until C++11
这一点只在C++11中得到了解决,我不认为引入这样的额外语法是有道理的,因为可以说,圆括号本来可以达到同样的目的,同时又能保持最低限度的修改。你本可以用
template(typename T) // Define template if round brackets could
我想创建一个小的perl脚本,它将在modify it中的c++头中找到某个声明。到目前为止,我已经创建了"find“部分:
my $buildFile = "..\\Support\\BuildVersion.h";
my @result;
open( File, $buildFile ) or die "Can't open $buildFile.\n";
@result = <File>;
close( File );
print "Updating build version...\n";
open( N
我对Java很陌生。当我通过下面的循环处理时,我想显示循环的计数器值增加1。当我保留下面的代码时,我得到的值就像级联值1和计数器值1一样。为什么System.out.println使用连接而不是加法?
for (c = 0; c < Size; c++) {
System.out.println("here the problem " + c+1 + " Case");
}
我的第一语言是Javascript,但我开始学习C++。我最喜欢做的事情之一是使用Javascript中的方括号符号访问具有聪明变量属性名称的属性,如下所示:
var a = "prop";
var obj = {
this.prop : "before"
};
function alterObj(a){
obj[a] = "after";
}
这似乎并没有出现在我的C++书籍中,而且我在谷歌上也遇到了麻烦。那么如何在C++中动态地选择属性名呢?
我在C#和C++中都尝试过以下代码:
int a = 5;
int b = (a++)+(++a)+(a--)+(--a);
我注意到在C#和C++中b的结果是不同的。在C#,我得到了23分。在C++,我得到了20分。
为何会这样呢?为什么相同的表达式在C#和C++中会产生不同的结果?这是因为两种语言具有不同的运算符优先规则吗?
在VBA中可以忽略函数的返回值吗?
我现在要做的是:
Dim returnValue As Long 'This line is mandatory since I use Opition Explicit
returnValue = MsgBox("...")
我想做什么
MsgBox("...")
在C++中,我会以这样的方式解决这个问题:
(void) MsgBox("...")
(如何)我可以在Excel中解决这个问题?
在C或C++中,增量和递减运算符(++n,--n)在sizeof()运算符中不执行。
int n = 100;
int size_int = sizeof(++n);
std::cout<<n;
我编写了这段代码并运行了程序。当然,我想101会给我看。但是,n不是101岁,而是100岁。
为什么会这样呢?
我正在用C++编写游戏2048的程序,作为一种熟悉语言的练习。最初,代码没有抛出任何错误,但我在最终产品中得到了一些逻辑错误,所以我认为问题可能是我使用逻辑门不正确。当我只使用||时,我查找了它,很明显是|的正确语法,在我将它们全部更改为||之后,我的开关语句开始说有重复的情况,而似乎没有重复的情况。这是由什么引起的呢?
void slide(char direction){
int i;
int j;
switch (direction){
case 'W' || 'w':
for (j = 0;
我只有这段代码,我想知道为什么这段代码是在C++20中编译的,而不是在C++17和更早版本中编译的。
struct B {
B(int){};
};
struct D : B {
};
int main() {
D d = D(10);
}
我知道继承构造函数是一个C++11特性。但是类D并不继承B::B(int)构造函数,即使这一行D d = D(10);编译。我的问题是,为什么它只在C++20中编译,而不是在C++17中编译?是否有适用于这里的C++标准的报价?
我正在使用g++11.2.0。
下面是我的代码,我想像javascript一样在c++中测试闭包。为什么编译器会产生这条消息?"testLambda.cpp:在lambda函数中: testLambda.cpp:8:11: testLambda.cpp:8:11:‘a’未被捕获“
#include <iostream>
#include <functional>
std::function<bool(int)> returnLambda(int a){
auto b = 1;
auto c = 2;
re
为什么这是可行的?
int **ar1 = new int*[5];
虽然这会在c++中抛出一个错误:
int *ar2[] = new int*[5];
我知道在第一种情况下,ar1表示一个指向指针的指针,而在第二种情况下,ar2表示一个指向整数的指针数组。假设"new int*5“这一行意味着new运算符返回指向内存空间的指针以存储5个指向整数的指针,那么第二种情况有什么问题?
在C#中,我这样做:
float a = 4.0f;
float b = 84.5f;
int ans = a * b;
但是,编译器声明,在赋值时,从float ->转到int需要强制转换。当然,我可以这样做:
int ans = (int)a * (int)b;
但这是丑陋和多余的。有没有更好的方法?我知道在C++中我可以这样做:
int ans = int(a * b);
至少这在眼睛上看起来更好一点。但我似乎不能在C#中做到这一点。
我目前正在学习C++,我喜欢阅读和探索我在互联网上找到的程序。
我已经找到了这个示例C++代码,它将"4大于2“作为输出,但我不知道为什么:
#include <stdio.h>
#define MAX( a, b ) ( a > b ) ? (a) : (b)
int main()
{
int x = 2, y = 2;
if( MAX( ++x, y ) == x )
{
printf( " %d is greater than %d ", x, y );
}
return 0;
}
我
我总是想知道为什么Scala被设计成能够省略点和括号。这让我很困惑。例如,
"hello".length() can be written as
"hello".length
它造成了混乱:在C++编码器的角度上,
"hello".length() is calling the object's length() function
"hello".length is calling the object's private/public variable.
他们是完全不同的。
此外,它还可以读取没有点的代码,如:
到目前为止,我只在C++中看到过POD数组的赋值初始化。例如,
int array[]={1,2,3};
从中我了解到,当数组在C++11中的类/结构中时,可以使用初始化列表的方法对其进行初始化。
int array[]({1,2,3});
编译时出错:
array initializer must be an initializer list
我认为它只需要做一些修改,但我就是搞不明白。你能告诉我怎样才能做到吗?
顺便说一句,复制构造函数比这里的赋值构造函数更有效吗?我想不是,但我不知道确切的答案。