小编lar*_*ars的帖子

哪个查找规则阻止编译器找到该函数?

void Foo(int i)
{
}
struct Bar
{
    static void Foo() { Foo(1); }
};
Run Code Online (Sandbox Code Playgroud)

上面的代码没有编译.它找不到Foo(int).为什么?我知道它与具有相同的功能名称有关,但没有进一步了解问题.

为什么我需要合格的查找?

c++

18
推荐指数
2
解决办法
1682
查看次数

附加到 C++/CLI dll 的性能分析器无法达到本机 C++ 代码

设置:

在 C# 程序中,我从 .NET C++/CLI dll 调用函数。该 dll 与本机 C++ 库具有静态链接。Visual Studio 2017 就是这样的环境。

设置:

  • 这两个项目都设置了调试信息格式“程序数据库(/Zi)”。
  • dll 项目已设置生成调试信息“生成调试信息 (/DEBUG)”。
  • 我还为 dll 设置了配置文件“Yes (/PROFILE)”。不知道它有什么作用。

生成 .pdb 文件,将其放置在二进制文件的文件夹中,并在附加 Visual Studio 2017 性能分析器的情况下启动程序时加载。

  • 我在 dll 中看到一些顶级调用,但它似乎不完整,并且未达到本机 C++ 代码。
  • 我可以使用调试器单步执行本机 C++ 代码。
  • 调试器工具“Very Sleepy”给出了正确的输出。

一位同事表示,幽灵修复加上我使用 Win7 的事实导致了这个问题。(https://superuser.com/questions/1287914/visual-studio-2013-profiler-chrashes-and-system-restarts-reboots

我不确定我的问题与此有关...?我是否忘记了某些设置?

c++ profiler c++-cli visual-studio-2017

7
推荐指数
1
解决办法
955
查看次数

大括号构造函数更喜欢 initializer_list 而不是更好的匹配。为什么?

#include <vector>

using std::size_t;

struct Foo
{
    Foo(size_t i, char c) {}
};

Foo Bar1()
{
    size_t i = 0;
    char c = 'x';
    return { i, c }; // good
}

std::vector<char> Bar2()
{
    size_t i = 0;
    char c = 'x';
    return { i, c }; // bad
}
Run Code Online (Sandbox Code Playgroud)

https://wandbox.org/permlink/87uD1ikpMkThPTaw

警告:将 'i' 从 'std::size_t {aka long unsigned int}' 的转换范围缩小到 { } 内的 'char'

显然它试图使用向量的初始化列表。但是为什么不使用更好的匹配vector<char>(size_t, char)呢?

我可以在 return 语句中使用所需的构造函数而无需再次写入类型吗?

c++ constructor

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

标签 统计

c++ ×3

c++-cli ×1

constructor ×1

profiler ×1

visual-studio-2017 ×1