小编Mar*_* R.的帖子

是否可以在编译时执行字符串到 int 的映射?

是否可以在编译时执行唯一的字符串到 int 映射?\n假设我有一个这样的模板用于分析:

\n\n
template <int profilingID>\nclass Profile{\npublic:\n    Profile(){ /* start timer */ }\n    ~Profile(){ /* stop timer */ }\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

我将其放在函数调用的开头,如下所示:

\n\n
void myFunction(){\n    Profile<0> profile_me;\n\n    /* some computations here */\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我正在尝试做类似以下的事情,这是不可能的,因为字符串文字不能用作模板参数

\n\n
void myFunction(){\n    Profile<"myFunction"> profile_me; // or PROFILE("myFunction")\n\n    /* some computations here */\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以声明全局变量来解决这个问题,但我认为避免以前的声明会更优雅。表格的简单映射

\n\n
    \n
  • \xe2\x80\x9dmyFunction\xe2\x80\x9d \xe2\x86\x92 0
  • \n
  • \xe2\x80\x9dmyFunction1\xe2\x80\x9d \xe2\x86\x92 1
  • \n
  • \xe2\x80\xa6
  • \n
  • \xe2\x80\x9dmyFunctionN\xe2\x80\x9d \xe2\x86\x92 N
  • \n
\n\n

就足够了。但到目前为止,无论使用 constexpr、模板元编程还是宏,我都无法找到完成此类映射的方法。有任何想法吗?

\n

c++

5
推荐指数
1
解决办法
2624
查看次数

在哪些情况下(const)引用返回值是不安全的?

我倾向于使用以下符号:

const Datum& d = a.calc();
// continue to use d
Run Code Online (Sandbox Code Playgroud)

当calc的结果在堆栈上时,这可以工作,参见http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/.即使编译器可能在这里优化,但明确避免临时对象感觉很好.

今天我意识到,d在将数据写入成员之后,内容变得无效a.在这种特殊情况下,get函数只是返回对另一个成员的引用,这与写入完全无关.像这样:

const Datum& d = a.get();
// ... some operation ...
a.somedata = Datum2();
// now d is invalid.
Run Code Online (Sandbox Code Playgroud)

再次,somedata有无关dget()在这里.

现在我问自己:

  1. 哪些副作用可能导致失效?
  2. 将返回值分配给const引用是不是很糟糕?(特别是当我不知道功能的内部)

我的应用程序是单线程的,除了Qt GUI-Thread.

c++

4
推荐指数
2
解决办法
179
查看次数

将共享指针传递给非拥有函数时的最佳做法是什么?

由于使用共享指针,我经常在我想将它们传递给不必(必须)拥有该对象的函数的情况下运行.因为我知道在函数调用期间对象是有效的,我有四个传递指针的选项:

  1. 按价值
  2. 引用
  3. 弱指针
  4. 原始指针

起初我开始经常使用弱指针(因为我已经有了它们),但是一直锁定它们的开销很烦人并且达到了性能.现在我考虑通过引用传递原始指针或共享指针.有最好的做法吗?

c++ pointers

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

标签 统计

c++ ×3

pointers ×1