相关疑难解决方法(0)

下载时是否必须使用constexpr数组?

给出以下代码:

struct A { static constexpr int a[3] = {1,2,3}; };

int main () {
  int a = A::a[0];
  int b  [A::a[1]];
}
Run Code Online (Sandbox Code Playgroud)

A::a必然使用的ODRint a = A::a[0]


注意:这个问题代表了休息室辩论的一个不那么闷热/不合逻辑/无穷无尽的版本.

c++ language-lawyer constexpr c++11

15
推荐指数
3
解决办法
1336
查看次数

用C++ 1z定义全局常量?

C++ 1z中声明内存有效全局常量的最佳方法是什么,它不进行内部链接,因此在所有翻译单元中使用单个副本?

尽管在许多地方已经提到过,但我们没有任何单一的"最佳方法"问题和答案,所以在这里.以下是我找到相关问题的部分地方列表.

我在找为atleast所有基本基本类型的解决方案,如int,double,char,std::string.

编辑1: 最好的方式,我的意思是"记忆效率".我知道对于内部联系,每个翻译单元都会有多个副本,因此会占用内存.除此之外,如果我们能够实现快速的执行时间和编译时间,这将是伟大的,代码的美化(容易)并不重要.此外,我知道外部链接将增加获取时间,因为处理器可能会在运行时获得缓存未命中.但最新的C++语言是否支持所有这些的最佳方法?或者可能建议支持每个案例?

注意:对于std::string全局常量,最佳方法是什么?是否存在可变性会对有任何影响常量性

c++ constants c++17

9
推荐指数
2
解决办法
2374
查看次数

C++标准:ODR和constexpr std :: string_view

如果我有一个foo.h包含的标题

#ifndef FOO_H_
#define FOO_H_

namespace foo {
constexpr std::string_view kSomeString = "blah";
}

#endif  // FOO_H_
Run Code Online (Sandbox Code Playgroud)

那么在单个程序中包含foo.h多个.cc文件是否安全,无论它们对符号做什么kSomeString,或者是否存在可能导致ODR违规的一些用途?

此外,它是否保证kSomeString.data()将跨.cc文件返回相同的指针?

如果可能的话,我想特别引用C++标准中的措辞.谢谢!

c++ one-definition-rule linkage language-lawyer c++17

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