簡體   English   中英

使用=用於類模板的類內初始化程序

[英]In-class initialisers using = for class templates

我道歉但我不明白為什么以下不起作用(gcc 4.8.1):

#include <string>

using namespace std;

template <typename T> struct A{
    //A(): s("why") { } //fine
    //string s{"what"}; //also fine
    //A() = default; //(same error as below)
    string s = "why?!"; //error: conversion from 'const char [6]' to non-scalar type 'std::string {aka std::basic_string<char>}' requested|
};

struct B{
    string s = "why?!"; //all good
};

int main(){
    A<int> a;
    B b;
}

出於某種原因,通過引入模板,我無法使用=作為字符串s的類內初始值設定項。 內置類型工作,實際上我可以通過使用大括號或在默認構造函數中顯式初始化來規避它。 為什么要大概使用=

我沒有看到任何原因這不起作用,最近版本的gcc和clang編譯你的代碼沒有問題。

這看起來與以下gcc錯誤相關: 使用直接初始化NSDMI初始化向量不能在模板工作,在模板中,類初始化適用於非模板情況但不適用於模板情況:

#include <vector>

struct X {X(int) {}};

template <class zomg> 
class T {
  std::vector<int> x{0}; 
}; 

int main()
{
  T<int> t;
}

此錯誤報告: 類模板中非靜態數據成員T [N]的非空braced-init-list導致錯誤診斷,如果T是一個類,則與下面的測試用例稍微接近,以相同的方式失敗:

struct A { };

template<class>
struct B {
  A a[1] = { A () };
};

int main () { B<void> b; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM