我有以下代碼:未定義參考
#include<chrono>
#include<iostream>
using namespace std::chrono_literals;
#define MSG "hello"
#define DUR 1000ms
class mwe{
public:
static constexpr auto msg = MSG;
static constexpr auto dur_1 = DUR;
static constexpr std::chrono::milliseconds dur_2 = DUR;
static const std::chrono::milliseconds dur_3;
static constexpr decltype(DUR) dur_4 = DUR;
};
constexpr std::chrono::milliseconds mwe::dur_2;
const std::chrono::milliseconds mwe::dur_3 = DUR;
constexpr decltype(DUR) mwe::dur_4;
int main(void) {
std::cout << "str: " << mwe::msg << std::endl;
std::cout << "dur_1: " << mwe::dur_1.count() << std::endl;
std::cout << "dur_2: " << mwe::dur_2.count() << std::endl;
std::cout << "dur_3: " << mwe::dur_3.count() << std::endl;
std::cout << "dur_4: " << mwe::dur_4.count() << std::endl;
}
如果我編譯它(G ++ 4.9),通過
g++ -std=c++14 -O2 test.cpp
一切工作像預期,但如果我通過
g++ -std=c++14 -O0 test.cpp
編譯我收到以下錯誤:
undefined reference to `mwe::dur_1'
我個人喜歡這種方式,dur_1被定義並聲明最多,但如果沒有啓用優化,它在我的版本中不適用於g ++。 因爲我知道的所有其他方式(dur_2,dur_3,dur_4)都有它們的缺點(值的冗餘,如果我例如將1000ms更改爲1s,則aso。)。
你知道嗎if這是一個海灣合作委員會的錯誤,編譯工作生產模式,但沒有優化沒有工作?
有沒有可能的方法來獲得這個工作,而不需要在類之外定義dur_x的位置?
'dur_1' _isn't_定義。不確定你的預期。 –