小编vkn*_*vkn的帖子

[[不建议使用]]在VS2017中导致构建失败(错误C4996)

[[deprecated]]
void foo(){};

int main()
{
    foo();
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在VS2017中产生以下错误:

1>------ Build started: Project: test, Configuration: Debug Win32 ------
1>deprecation.cpp
1>d:\source\deprecation.cpp(6): error C4996: 'foo': was declared deprecated
1>d:\source\deprecation.cpp(2): note: see declaration of 'foo'
1>Done building project "test.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud)

不幸的是,搜索此错误会导致“如何使用[[deprecated]]”和“不赞成使用哪些功能”的问题。样式问题。

我检查的每个资源似乎都建议使用[[deprecated]]应该和上面写的一样简单-预期会出现编译器错误/警告,但不是编译失败。注释掉[[deprecated]]行可成功构建。

项目的目标是Windows SDK版本10.0.17763.0。

cl.exe版本是19.16.27027。

我是否错过了使用[[deprecated]]的显而易见的东西,还是VS2017寻找打破它的方法?

c++ deprecated cl.exe visual-studio-2017

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

C ++:如何从lambda中“捕获”不可复制的内容(例如unique_ptr)?

考虑以下:

unique_ptr<int> foo = make_unique<int>(42);

auto lambda = [bar = move(foo)]()
    {
        /* Do something with bar */
    };

lambda(); // No issues invoking this

cout << "*foo = " << *foo; //Attempts to dereference foo will segfault
Run Code Online (Sandbox Code Playgroud)

捕获诸如unique_ptr之类的东西需要使用std :: move,以保持unique_ptr的唯一性。但是,当我想在销毁lambda之后使用同一智能指针时该怎么办?使用foo将产生段错误,并且bar超出了该范围。

也许撇开lambda的非正统用法,我如何找回unique_ptr?它会永远被困在lambda中吗?

c++ lambda capture unique-ptr

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

对复制构造函数已被删除的对象向量进行迭代 (C2280)

我有一个类,其复制构造函数已被删除。当尝试迭代std::vector此类的包含对象时,我无法以“好的”方式做到这一点,并且必须使用某种迭代变量。

struct foo {

foo() :
    val(0)
{}

foo(const foo&) = delete;

int val;

};

int main() {

std::vector<foo> fooVec(5);

for (auto f : fooVec) //C2280 - attempting to reference a deleted function!
{
    std::cout << f.val << std::endl;
}

for (int i = 0; i < fooVec.size(); i++) //no problems
{
    std::cout << fooVec[i].val << std::endl;
}

}
Run Code Online (Sandbox Code Playgroud)

是否有一种巧妙的方法可以迭代不可复制对象的向量,而无需使用迭代变量?

我非常热衷于学习如何使用现代功能,并尝试学习如何正确处理特殊成员函数,作为现代化某些现有代码的一部分(我们仍然有原始指针)。

c++

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