我正在玩一些东西来理解复制构造函数的工作原理.但我无法理解为什么复制构造函数被调用两次才能创建x2
.我会假设在createX()
复制返回值时会调用一次x2
.
我还看了一些关于SO的相关问题,但据我所知,我找不到与我在这里问的相同的简单场景.
顺便说一句,我正在编译,-fno-elide-constructors
以便在没有优化的情况下查看正在发生的事情.
#include <iostream>
struct X {
int i{2};
X() {
std::cout << "default constructor called" << std::endl;
}
X(const X& other) {
std::cout << "copy constructor called" << std::endl;
}
};
X createX() {
X x;
std::cout << "created x on the stack" << std::endl;
return x;
}
int main() {
X x1;
std::cout << "created x1" << std::endl;
std::cout << "x1: " << x1.i << std::endl << std::endl;
X …
Run Code Online (Sandbox Code Playgroud) 当我使用Visual Studio运行我的应用程序时,我总是得到一个DisconnectedContext(一个托管调试助手).鉴于Google和docs,当从其他线程调用STA上的COM对象时,可能会发生这种情况.
但是,当我看到弹出窗口中的所有线程时,我找不到这样的东西.(而且我没有发现任何奇怪的东西).
关于如何找到DisconnectedContext的方式的一些想法?
我有一个与在流浪者环境中安装Symfony2有关的古怪问题.环境设置正确,并且正在运行Web服务器,该服务器从与vagrant的基本目录中的vagrant环境共享的文件夹中提供文件.
基本上,vagrant是在目录foo中启动的,然后在foo中,有一个名为webroot的目录.Vagrant自动共享foo目录.设置apache服务器以运行,以便webroot是基本http目录.这一切都很好,我能够提供基本的HTML,PHP和MySQL连接测试没问题.
我使用composer以推荐的方式将vagrant安装到/ webroot /中称为Symfony的目录中.现在所有文件都存在于正确的目录中.配置正确,并且没有Symfony声称需要在/config.php中更改的项目.
当我尝试加载/app_dev.php时出现问题.它抛出一个异常,声称它无法在/ app目录中创建名为cache的文件.
由于chmod + a在我正在使用的流浪盒中不受支持,我选择通过在app_dev中取消注释umask(0000)来设置权限.假设这是一个权限问题,我尝试使用chmod来调整流浪者环境和osx内的权限,以便将所有权限调整到777.
奇怪的是,当我在流浪者环境中chmod一个文件或目录时,它声称正确设置了777但是当我ls -l时,权限没有改变.但是,当我从OUTSIDE chmod webroot文件夹中的vagrant环境chmod文件或目录时,权限仍然存在.由于symfony在环境中没有r/w权限,因此无法创建必要的缓存和日志文件.当我从osx的命令运行symfony时,一切正常.
有没有人对如何更改/ webroot目录的权限有任何见解,因此流浪者环境中的事物实际上可以读取和写入它,因为chmod似乎不起作用?
我有一个应用程序正在等待开发人员发布(Apple批准).该应用程序从未发布过.现在我想提交更新.因此我增加了CFBundleVersion
,但他抱怨道.所以我也增加了CFBundleShortVersionString
.
在iTunes Connect中,我可以在预发布中看到我的新提交.但在版本视图中,我看到了旧版本.那么我该如何批准更新?如果我能够自己管理发布的时间,那就太好了.因此,它一直等待开发人员发布.
我有什么选择?我应该拒绝二进制文件吗?我应该使用哪些版本/内部版本号?我可以重复使用旧的吗?
我在这里有一个简单的示例:我使用类型别名using using
关键字作为引用类型,然后我想知道是否可以通过指针运算符(*)使用该类型别名来声明对指针的引用:
int main(){
using ref_int = int&;
int x = 10;
int* p = &x;
//int*(&rpx) = p;
//ref_int * rptrx = p; // pointer to reference is not allowed.
*ref_int(rptrx) = p; // rptrx is undefined
}
Run Code Online (Sandbox Code Playgroud)
因为出于好奇,当我使用Element的类型时,std::vector<int>::reference
我想将其与指针运算符结合*
以声明对指针的引用:
int* ptr = new int(1000);
std::vector<int>::*(reference rptr) = ptr; // error: expected expression
Run Code Online (Sandbox Code Playgroud)但是我可以结合使用指针类型别名和引用运算符“&”来声明它:
using pInt = int*;
int i = 57;
int* ptrI = &i;
pInt(&rpInt) = ptrI;
cout << *rpInt << endl;
Run Code Online (Sandbox Code Playgroud)**我知道我没有指向引用的指针,因为引用只是已有对象的别名,而指针是一个对象,因此我们可以有一个指向它的指针或引用。
如果在std::ofstream
没有openmode
标志的情况下ios_base::out
调用构造函数,则默认标志为.但这是暗示ios_base::trunc
还是ios_base::app
?
换句话说,如果您的文件系统中已经有一个非空文件"past.txt"并且您正在调用
std::ofstream stream( "past.txt" );
stream << "new content";
Run Code Online (Sandbox Code Playgroud)
"新内容"是否会附加到"past.txt"的先前内容中,还是会替换先前的内容?
看看这段代码:
struct A {
short s;
int i;
};
struct B {
short s;
int i;
};
union U {
A a;
B b;
};
int fn() {
U u;
u.a.i = 1;
return u.b.i;
}
Run Code Online (Sandbox Code Playgroud)
是否保证fn()
退货1
?
注:这是一个后续问题要这个.
我想出了以下代码,在编译时检测继承的函数是否在派生类中被覆盖。它适用于所有主要编译器 - gcc/clang/msvc。但是这种方法实际上得到了标准的支持吗?
#include <type_traits>
struct B {
virtual void f1() {}
virtual void f2() {}
void f3() {}
void f4() {}
};
struct D: B {
void f1() override {}
void f3() {}
};
int main()
{
static_assert(!std::is_same_v<decltype(&B::f1), decltype(&D::f1)>, "overriden");
static_assert(std::is_same_v<decltype(&B::f2), decltype(&D::f2)>, "base");
static_assert(!std::is_same_v<decltype(&B::f3), decltype(&D::f3)>, "overriden");
static_assert(std::is_same_v<decltype(&B::f4), decltype(&D::f4)>, "base");
return 0;
}
Run Code Online (Sandbox Code Playgroud) 使用该线路时
using std::literals::chrono_literals::operator""s;
Run Code Online (Sandbox Code Playgroud)
在g ++ 6.3.0中,编译器发出警告声明:
警告:未包含"_"的文字运算符后缀保留用于将来的标准化
Run Code Online (Sandbox Code Playgroud)using std::literals::chrono_literals::operator""s;
MSVS也发布了类似的警告.然而,铿锵声3.8.0没有发出这样的警告.
由于operator""s
chrono库的标准定义不应该发出警告,因为我们只是导入名称而不是定义名称?
c++ using-directives reserved-words language-lawyer user-defined-literals
我想要一个程序来定义一个宏,它可以计算参数的数量,并将它们传递给一个函数sum
,该函数对参数的值进行求和并返回总数.我设法在GCC上做了,但我想在Visual C++ 14上实现它.
#include "stdafx.h"
#include <iostream>
#include <cstdarg>
#define ELEVENTH_ARGUMENT(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, ...) a11
#define COUNT_ARGUMENTS(...) ELEVENTH_ARGUMENT(dummy, ## __VA_ARGS__, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
#define SUM(...) sum(ELEVENTH_ARGUMENT(dummy, ## __VA_ARGS__, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0))
int sum(int n, ...) {
int sz{ n };
va_list ap;
va_start(ap, n);
int tmp{};
while (--sz)
tmp += va_arg(ap, int);
va_end(ap);
return tmp;
} …
Run Code Online (Sandbox Code Playgroud)