相关疑难解决方法(0)

对静态类成员的未定义引用

谁能解释为什么以下代码无法编译?至少在g ++ 4.2.4上.

更有趣的是,为什么它会在我将MEMBER转换为int时进行编译?

#include <vector>

class Foo {  
public:  
    static const int MEMBER = 1;  
};

int main(){  
    vector<int> v;  
    v.push_back( Foo::MEMBER );       // undefined reference to `Foo::MEMBER'
    v.push_back( (int) Foo::MEMBER ); // OK  
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ g++

191
推荐指数
5
解决办法
11万
查看次数

下载时是否必须使用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
查看次数

使用constexpr auto/char-array变量观察到不同的行为

跟进这个问题有一个constexpr静态字符串会给出一个链接器错误

在这个问题中,这段代码无法编译:

#include <iostream>

struct Test { static constexpr char text[] = "Text"; };

int main()
{
    std::cout << Test::text << std::endl; // error: undefined reference to `Test::text'
}
Run Code Online (Sandbox Code Playgroud)

从评论中,这段代码能够编译:

#include <iostream>

struct Test { static constexpr auto text = "Text"; };

int main()
{
    std::cout << Test::text << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么auto版本可以工作,但版本的数组char没有?

能不能指出标准中的声明允许第二个版本而不允许第一个版本?

我看了一下constexpr静态成员变量的奇怪行为,但它似乎是另一个问题.

c++ language-lawyer constexpr auto c++11

4
推荐指数
1
解决办法
319
查看次数

标签 统计

c++ ×3

c++11 ×2

constexpr ×2

language-lawyer ×2

auto ×1

g++ ×1