小编Nat*_*ica的帖子

为什么复制构造函数在此代码段中调用了两次?

我正在玩一些东西来理解复制构造函数的工作原理.但我无法理解为什么复制构造函数被调用两次才能创建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)

c++ copy-constructor c++14

14
推荐指数
2
解决办法
1219
查看次数

在Visual Studio中解决DisconnectedContext

当我使用Visual Studio运行我的应用程序时,我总是得到一个DisconnectedContext(一个托管调试助手).鉴于Google和docs,当从其他线程调用STA上的COM对象时,可能会发生这种情况.

但是,当我看到弹出窗口中的所有线程时,我找不到这样的东西.(而且我没有发现任何奇怪的东西).

关于如何找到DisconnectedContext的方式的一些想法?

.net c# debugging visual-studio

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

流浪汉和symfony2

我有一个与在流浪者环境中安装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似乎不起作用?

php apache macos symfony vagrant

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

更新正在等待开发人员发布的应用

我有一个应用程序正在等待开发人员发布(Apple批准).该应用程序从未发布过.现在我想提交更新.因此我增加了CFBundleVersion,但他抱怨道.所以我也增加了CFBundleShortVersionString.

在iTunes Connect中,我可以在预发布中看到我的新提交.但在版本视图中,我看到了旧版本.那么我该如何批准更新?如果我能够自己管理发布的时间,那就太好了.因此,它一直等待开发人员发布.

我有什么选择?我应该拒绝二进制文件吗?我应该使用哪些版本/内部版本号?我可以重复使用旧的吗?

itunesconnect app-store ios

13
推荐指数
2
解决办法
6679
查看次数

是否可以将引用类型别名与指针运算符一起使用来声明对指针的引用?

我在这里有一个简单的示例:我使用类型别名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)

**我知道我没有指向引用的指针,因为引用只是已有对象的别名,而指针是一个对象,因此我们可以有一个指向它的指针或引用。

c++ pointers reference type-alias

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

std :: ofstream是否会截断或追加默认值?

如果在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"的先前内容中,还是会替换先前的内容?

c++ fstream

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

布局兼容类型的联合

看看这段代码:

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

注:这是一个后续问题要这个.

c++ unions language-lawyer standard-layout c++17

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

检测继承的函数是否被覆盖

我想出了以下代码,在编译时检测继承的函数是否在派生类中被覆盖。它适用于所有主要编译器 - 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)

c++ language-lawyer

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

使用命令时,using命令是否应该发出警告?

使用该线路时

using std::literals::chrono_literals::operator""s;
Run Code Online (Sandbox Code Playgroud)

在g ++ 6.3.0中,编译器发出警告声明:

警告:未包含"_"的文字运算符后缀保留用于将来的标准化

using std::literals::chrono_literals::operator""s;
Run Code Online (Sandbox Code Playgroud)

MSVS也发布了类似的警告.然而,铿锵声3.8.0没有发出这样的警告.

由于operator""schrono库的标准定义不应该发出警告,因为我们只是导入名称而不是定义名称?

c++ using-directives reserved-words language-lawyer user-defined-literals

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

如何将传递给variadic宏的可变参数求和?

我想要一个程序来定义一个宏,它可以计算参数的数量,并将它们传递给一个函数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)

c++

10
推荐指数
2
解决办法
496
查看次数