Faits :
A.
Par jugement du 29 janvier 2018, le Tribunal correctionnel de l'arrondissement de la Broye et du Nord vaudois a condamné X._, pour infraction grave ainsi que contravention à la LStup, à une peine privative de liberté de 14 mois, avec sursis durant trois ans portant sur sept mois, sous déduction de 319 jours de détention avant jugement, a constaté que le prénommé a été détenu dans des conditions de détention illicites durant 28 jours et a ordonné que 14 jours soient déduits de sa peine privative de liberté à titre de réparation du tort moral. Il a en outre condamné X._ à une amende de 800 francs.
B.
Par jugement du 11 juillet 2018, la Cour d'appel pénale du Tribunal cantonal du canton de Vaud, statuant sur les appels formés par X._ et par le ministère public contre ce jugement, a réformé celui-ci en ce sens que la peine privative de liberté prononcée est complémentaire à celle prononcée le 1er mai 2018 par le ministère public, que la cour constate que le prénommé a été détenu dans des conditions de détention illicites durant 26 jours et ordonne que 13 jours soient déduits de sa peine privative de liberté à titre de réparation du tort moral et que l'expulsion de celui-ci du territoire suisse pour une durée de cinq ans est ordonnée. Elle a confirmé le jugement pour le surplus.
La cour cantonale a retenu les faits suivants.
B.a. X._ est né en 1971 en France, pays dont il est ressortissant. Il possède en outre la nationalité algérienne et se trouve au bénéfice d'une autorisation d'établissement en Suisse. Arrivé en Suisse à l'âge de 3 ou 4 ans, le prénommé y a vécu en institut, puis dans une famille d'accueil jusqu'à l'âge de 12 ans. Il a ensuite été emmené contre son gré en Algérie. X._, qui était alors maltraité par sa famille, a rejoint des clans de rue, au sein desquels il a vécu jusqu'à l'âge de 17 ans. Il a par la suite regagné la France, où il a travaillé trois mois avant d'accomplir son service militaire dans l'armée française. En 1990, il a gagné la Suisse pour y effectuer un apprentissage de plâtrier-peintre, sans obtenir de CFC. X._ a ensuite oeuvré dans différentes sociétés actives notamment dans le domaine du bâtiment, jusqu'à l'âge de 28 ans. Dès l'âge de 21 ans, celui-ci était tombé dans la toxicomanie. Après une cure et l'obtention d'un diplôme en marketing, X._ a travaillé dans le domaine des assurances jusqu'en 2010. Au terme d'une série de déboires personnels, il a rechuté dans la consommation de stupéfiants et émarge depuis à l'assistance publique.
Le casier judiciaire suisse de X._ fait état d'une condamnation, en 2008, pour vol d'usage, conduite malgré une interdiction et contravention à la LStup, d'une condamnation, en 2009, pour délit contre la LStup, ainsi que d'une condamnation, en 2018, pour délit contre la LStup.
B.b. Entre décembre 2016 et mars 2017, pour l'essentiel à A._, X._ a acheté, le plus souvent avec sa compagne B._, entre 675 et 810 g d'héroïne, pour un montant total estimé à 12'600 francs. Une partie de cette marchandise était destinée à la consommation propre de l'intéressé, mais celui-ci a néanmoins remis ou vendu à des tiers au minimum 24,2 g bruts d'héroïne. Le 12 mars 2017, il a acquis, pour deux de ses connaissances et sans contrepartie financière, huit sachets de 5 g chacun, soit 40 g bruts d'héroïne. Le 16 mars 2017, X._ s'est en outre déplacé seul en ville de A._, où il s'est procuré 19 sachets d'héroïne, lesquels contenaient au total 74,28 g bruts de cette substance. La moitié de cette marchandise était destinée à B._. En tenant compte d'un taux de pureté de 15%, l'intéressé a remis, respectivement vendu à des tiers, au minimum 15,13 g d'héroïne pure.
Durant la même période, X._ a consommé entre 255 et 325 g bruts d'héroïne.
C.
X._ forme un recours en matière pénale au Tribunal fédéral contre le jugement du 11 juillet 2018, en concluant, avec suite de frais et dépens, à sa réforme en ce sens qu'il est condamné, pour infraction simple et contravention à la LStup, à une peine fixée à dire de justice, avec sursis complet et assortie d'une règle de conduite durant le délai d'épreuve, qu'il est constaté que celui-ci a subi 319 jours de détention "de manière illicite" et qu'une indemnité d'un montant de 65'100 fr., avec intérêts, lui est allouée à titre de l'art. 429 al. 1 let. c CPP. Il sollicite par ailleurs le bénéfice de l'assistance judiciaire.
Considérant en droit :
1.
Le recourant reproche à la cour cantonale d'avoir apprécié les preuves et établi les faits de manière arbitraire. Il se plaint en outre, à cet égard, d'une violation du principe "in dubio pro reo".
1.1. Le Tribunal fédéral n'est pas une autorité d'appel, auprès de laquelle les faits pourraient être rediscutés librement. Il est lié par les constatations de fait de la décision entreprise (art. 105 al. 1 LTF), à moins qu'elles n'aient été établies en violation du droit ou de manière manifestement inexacte au sens des art. 97 al. 1 et 105 al. 2 LTF, soit pour l'essentiel de façon arbitraire au sens de l'art. 9 Cst. Une décision n'est pas arbitraire du seul fait qu'elle apparaît discutable ou même critiquable; il faut qu'elle soit manifestement insoutenable et cela non seulement dans sa motivation mais aussi dans son résultat (ATF 143 IV 241 consid. 2.3.1 p. 244). En matière d'appréciation des preuves et d'établissement des faits, il n'y a arbitraire que lorsque l'autorité ne prend pas en compte, sans aucune raison sérieuse, un élément de preuve propre à modifier la décision, lorsqu'elle se trompe manifestement sur son sens et sa portée, ou encore lorsque, en se fondant sur les éléments recueillis, elle tire des conclusions insoutenables (ATF 143 IV 500 consid. 1.1 p. 503; 140 III 264 consid. 2.3 p. 266 et les références citées). Le Tribunal fédéral n'entre pas en matière sur les critiques de nature appellatoire (ATF 142 III 364 consid. 2.4 p. 368 et les références citées). La présomption d'innocence, garantie par les art. 10 CPP, 32 al. 1 Cst., 14 par. 2 Pacte ONU II et 6 par. 2 CEDH, ainsi que son corollaire, le principe "in dubio pro reo", concernent tant le fardeau de la preuve que l'appréciation des preuves au sens large (ATF 127 I 38 consid. 2a p. 40 s.; arrêt 6B_804/2017 du 23 mai 2018 consid. 2.2.3.1 destiné à la publication). En tant que règle sur le fardeau de la preuve, elle signifie, au stade du jugement, que le fardeau de la preuve incombe à l'accusation et que le doute doit profiter au prévenu. Comme règle d'appréciation des preuves (sur la portée et le sens précis de la règle sous cet angle, cf. arrêt 6B_804/2017 précité consid. 2.2.3.3 destiné à la publication), la présomption d'innocence signifie que le juge ne doit pas se déclarer convaincu de l'existence d'un fait défavorable à l'accusé si, d'un point de vue objectif, il existe des doutes quant à l'existence de ce fait. Il importe peu qu'il subsiste des doutes seulement abstraits et théoriques, qui sont toujours possibles, une certitude absolue ne pouvant être exigée. Il doit s'agir de doutes sérieux et irréductibles, c'est-à-dire de doutes qui s'imposent à l'esprit en fonction de la situation objective. Lorsque l'appréciation des preuves et la constatation des faits sont critiquées en référence au principe "in dubio pro reo", celui-ci n'a pas de portée plus large que l'interdiction de l'arbitraire (ATF 143 IV 500 consid. 1.1 p. 503; 138 V 74 consid. 7 p. 82; arrêt 6B_804/2017 précité consid. 2.2.3.3 destiné à la publication).
1.2. La cour cantonale a exposé que le recourant avait admis avoir vendu, entre décembre 2016 et mars 2017, 15 g d'héroïne. Toutefois, les consommateurs entendus durant l'enquête avaient reconnu avoir obtenu un total de 24,2 g bruts d'héroïne. C._ avait notamment admis avoir acquis environ 2 g d'héroïne par semaine durant 15 semaines, soit l'équivalent de 30 g au total. Elle avait par la suite déclaré n'avoir pris qu'un gramme au maximum par semaine, ce qui devait conduire à retenir, s'agissant de la prénommée, un total de 15 g bruts.
Concernant le taux de pureté, l'autorité précédente s'est fondée sur les tabelles établies par l'Ecole des sciences criminelles de l'Université de Lausanne, basées sur les statistiques produites par la Société suisse de médecine légale. Pour l'héroïne, ces tabelles retenaient un taux de pureté de 6% pour un poids brut unitaire inférieur à 1 g et de 15% pour un poids brut unitaire compris entre 1 et 10 g. Comme le recourant se procurait l'héroïne en achetant des sachets de 5 g chacun et n'avait jamais prétendu avoir coupé cette substance avant de la remettre à des tiers, il convenait de retenir un taux de pureté de 15%. En définitive, le recourant avait ainsi mis sur le marché l'équivalent de 3,63 g d'héroïne pure.
Par ailleurs, le recourant avait admis avoir acquis 40 g bruts d'héroïne, conditionnés en paquets de 5 g, pour des amis. En tenant compte d'un taux de pureté de 15%, l'intéressé avait acquis, transporté et remis à des tiers un total de 6 g d'héroïne pure.
Enfin, selon la cour cantonale, le recourant avait admis avoir acheté, le 16 mars 2017 à A._, 74,28 g bruts d'héroïne, dont il avait remis la moitié à B._. En tenant compte d'un taux de pureté de 15%, il s'agissait donc de 6 g d'héroïne pure. Le recourant avait ainsi, au total, acquis, transporté et remis à des tiers 15,13 g d'héroïne pure.
1.3. Le recourant relève que la cour cantonale s'est fondée sur les déclarations de C._ pour retenir que celle-ci lui avait acheté environ 1 g d'héroïne par semaine durant 15 semaines. Il soutient que, dès lors que la prénommée a déclaré durant les débats de première instance ne pas l'avoir vu pendant trois semaines à un mois - à la fin janvier 2017 -, il convenait de retenir une quantité de 8 g bruts d'héroïne.
Au cours des débats de première instance, C._ a spontanément déclaré avoir acheté au recourant non pas 2 g - comme elle l'avait indiqué précédemment - mais 1 g par semaine durant la période concernée. Elle a ajouté ce qui suit (cf. jugement du 29 janvier 2018, p. 15) :
"Pendant trois semaines, un mois, fin janvier 2017, je n'ai pas revu [le recourant] car je lui devais un peu d'argent et ne voulais pas le revoir avant de pouvoir le rembourser (environ 70 francs)."
Or, durant l'une de ses précédentes auditions, la prénommée avait déclaré ce qui suit à propos de ses achats d'héroïne (cf. PV d'audition du 17 mars 2017, p. 5) :
"Cette consommation d'environ 1 g par semaine remonte à fin décembre ou début janvier de cette année. Pour vous répondre, cela fait environ 5 ans que je connais [le recourant]. [...] Depuis janvier, je n'ai jamais acheté d'héroïne à quelqu'un d'autre."
Il découle de ce qui précède qu'au cours des débats de première instance, C._ est revenue aux déclarations faites à la police en mars 2017 - faisant état de l'achat d'environ 1 g d'héroïne par semaine -, en s'écartant des explications fournies ultérieurement, faisant état de l'acquisition de 2 g par semaine (cf. PV du 7 avril 2017, p. 3). Or, en avril 2017, l'intéressée indiquait avoir entamé ces acquisitions hebdomadaires à la fin du mois de décembre 2016 et ne pas s'être fournie auprès d'autrui depuis janvier 2017. Dans ces conditions, il n'apparaît pas insoutenable de retenir que, contrairement aux déclarations faites pour la première fois au cours des débats de première instance, C._ n'a pas purement et simplement cessé sa consommation d'héroïne durant près d'un mois car elle estimait devoir honorer une dette d'environ 70 fr. à l'égard du recourant.
1.4. Le recourant présente par ailleurs une argumentation purement appellatoire et, partant, irrecevable, par laquelle il rediscute l'interprétation de ses déclarations faites à propos de l'héroïne acquise pour le compte d'amis, sans démontrer en quoi il aurait été arbitraire, pour l'autorité précédente, de retenir qu'il avait ainsi acheté 40 g au total.
1.5. Le recourant conteste encore le taux de pureté de l'héroïne retenu par la cour cantonale.
Selon la jurisprudence, lorsque la drogue n'est plus disponible pour une analyse, le taux de pureté peut être déterminé sur une base statistique en référence au degré de pureté habituel à l'époque du trafic (cf. ATF 138 IV 100 consid. 3.5 p. 105; arrêt 6B_940/2014 du 16 septembre 2015 consid. 5.3.1 et les références citées).
En l'occurrence, le recourant ne démontre pas en quoi il aurait été arbitraire, pour l'autorité précédente, de déterminer le taux de pureté en se fondant sur les tabelles intitulées "Taux de pureté des saisies de cocaïne et d'héroïne pour 2017", réalisées par l'Ecole des sciences criminelles de l'Université de Lausanne (cf. pièce 117 du dossier cantonal), dont l'intéressé ne critique aucunement la validité.
Contrairement à ce que suggère le recourant, le Tribunal fédéral n'a aucunement déterminé de manière définitive, dans l'arrêt 6B_1040/2009 du 13 avril 2010 (consid. 2.2.1) le taux de pureté moyen de l'héroïne sur le marché. Il s'agissait alors de définir quel taux de pureté pouvait être pris en compte pour la fixation de la peine, non d'établir le taux effectif de la drogue. Peu importe, par ailleurs, que le Ministère public de la République et canton de Genève évoque, dans ses directives internes, un taux de pureté moyen de 10% pour l'héroïne. Le taux en question se fonde en effet directement sur l'arrêt du Tribunal fédéral précité. Or, il n'apparaît pas que la valeur énoncée serait plus précise ou pertinente que celle ressortant des tabelles utilisées par la cour cantonale.
Pour le reste, on perçoit mal en quoi il aurait été arbitraire, pour l'autorité précédente, de tenir compte du taux de pureté moyen de 15% - pertinent s'agissant de quantités d'héroïne brute comprises entre 1 et 10 g par unité - et non de 6% pertinent pour le poids brut unitaire inférieur à 1 g, qui ne concernait pas les agissements reprochés au recourant.
1.6. Compte tenu de ce qui précède, le grief doit être rejeté dans la mesure où il est recevable.
2.
Le recourant fait grief à l'autorité précédente d'avoir violé l'art. 19 al. 2 LStup.
Il convient tout d'abord de relever que l'argumentation du recourant ne répond pas, pour l'essentiel, aux exigences de motivation découlant de l'art. 42 al. 2 LTF, puisque celui-ci ne s'attache pas à démontrer une éventuelle violation du droit fédéral par l'autorité précédente, mais reproduit mot à mot des pans entiers de l'argumentation présentée en instance cantonale (cf. pièce 138/1 du dossier cantonal). Cette manière de procéder est irrecevable (cf. ATF 134 II 244 consid. 2.1 p. 245 s.).
Ensuite, l'argumentation du recourant est irrecevable dans la mesure où elle s'écarte de l'état de fait de la cour cantonale, par lequel le Tribunal fédéral est lié (cf. art. 105 al. 1 LTF), sans démontrer en quoi celui-ci serait entaché d'arbitraire (cf. art. 97 al. 1 LTF). Il en va ainsi lorsque l'intéressé avance librement des éléments relatifs à sa consommation de stupéfiants ainsi qu'à celle de B._, ou concernant le voyage à A._ du 16 mars 2017.
Quoi qu'il en soit, on peine à saisir le sens de l'argumentation présentée par le recourant, lequel soutient qu'il se serait rendu coupable de "coaction de consommation". Dès lors que l'intéressé s'est rendu à A._ le 16 mars 2017, s'y est procuré une quantité d'héroïne brute de 74,28 g dont il a remis ensuite la moitié à B._ pour sa consommation, il ne pouvait - s'agissant des 37,14 g d'héroïne concernés - tomber sous le coup de l'art. 19a LStup en "coactivité".
Le grief doit être rejeté dans la mesure où il est recevable.
3.
Le recourant reproche à la cour cantonale d'avoir enfreint les règles guidant la fixation de la peine.
3.1. L'art. 47 CP prévoit que le juge fixe la peine d'après la culpabilité de l'auteur. Il prend en considération les antécédents et la situation personnelle de ce dernier ainsi que l'effet de la peine sur son avenir (al. 1). La culpabilité est déterminée par la gravité de la lésion ou de la mise en danger du bien juridique concerné, par le caractère répréhensible de l'acte, par les motivations et les buts de l'auteur et par la mesure dans laquelle celui-ci aurait pu éviter la mise en danger ou la lésion, compte tenu de sa situation personnelle et des circonstances extérieures (al. 2). La culpabilité de l'auteur doit être évaluée en fonction de tous les éléments objectifs pertinents, qui ont trait à l'acte lui-même, à savoir notamment la gravité de la lésion, le caractère répréhensible de l'acte et son mode d'exécution. Du point de vue subjectif, sont pris en compte l'intensité de la volonté délictuelle ainsi que les motivations et les buts de l'auteur. A ces composantes de la culpabilité, il faut ajouter les facteurs liés à l'auteur lui-même, à savoir les antécédents, la réputation, la situation personnelle (état de santé, âge, obligations familiales, situation professionnelle, risque de récidive, etc.), la vulnérabilité face à la peine, de même que le comportement après l'acte et au cours de la procédure pénale (ATF 142 IV 137 consid. 9.1 p. 147; 141 IV 61 consid. 6.1.1 p. 66 s.). Le juge dispose d'un large pouvoir d'appréciation dans le cadre de la fixation de la peine. Le Tribunal fédéral n'intervient que lorsque l'autorité cantonale a fixé une peine en dehors du cadre légal, si elle s'est fondée sur des critères étrangers à l'art. 47 CP, si des éléments d'appréciation importants n'ont pas été pris en compte ou, enfin, si la peine prononcée est exagérément sévère ou clémente au point de constituer un abus du pouvoir d'appréciation (ATF 136 IV 55 consid. 5.6 p. 61; arrêt 6B_817/2018 du 23 octobre 2018 consid. 3.1).
3.2. La cour cantonale a estimé que la culpabilité du recourant était lourde. Celui-ci avait contribué à mettre sur le marché l'équivalent de 15,13 g d'héroïne pure, quantité susceptible de mettre en danger la santé de nombreuses personnes. En considérant avoir agi essentiellement pour rendre service, en niant toute forme de trafic et en persistant à se présenter comme la victime d'une détention arbitraire, le recourant avait démontré qu'il n'avait aucunement pris conscience de la gravité de ses actes. L'intéressé avait par ailleurs des antécédents, déjà liés aux infractions en matière de stupéfiants. A cela s'ajoutait sa condamnation, le 1er mai 2018, pour la vente, le 30 avril 2018 - soit postérieurement au jugement de première instance -, d'1 g d'héroïne. A décharge, l'autorité précédente a tenu compte du fait que le recourant était lui-même toxicodépendant et que les revenus de son activité avaient essentiellement servi à financer sa propre consommation de stupéfiants.
3.3. Le recourant conteste la qualification de "lourde" s'agissant de sa culpabilité, en affirmant n'avoir commis des infractions qu'en vue d'assouvir sa propre dépendance et sans dessein d'enrichissement, ce qui a été relevé par la cour cantonale. En soutenant que la quantité de stupéfiants concernée ne serait pas "importante" et qu'il aurait agi pour rendre service à d'autres toxicomanes, le recourant confirme l'appréciation de l'autorité précédente selon laquelle il n'a pas pris conscience de la gravité de ses agissements, en particulier du danger pour la santé d'autrui que représentait la drogue remise à des tiers.
Enfin, le recourant prétend que la cour cantonale aurait dû retenir sa bonne collaboration durant l'enquête. A cet égard, il se contente d'indiquer avoir spontanément avoué l'acquisition de 17 sachets d'héroïne à A._ le 16 mars 2017. L'aveu de cet achat était certes spontané. Le recourant a cependant indiqué que les stupéfiants en question devaient uniquement servir sa propre consommation et qu'ils avaient été cachés "dans la forêt". Ce n'est qu'après une perquisition conduite par la police au domicile de B._ que le recourant a admis que la drogue découverte était celle achetée à A._ et que la moitié devait en réalité revenir à la prénommée (cf. PV d'audition du 17 mars 2017, p. 7). On ne voit pas en quoi le seul aveu évoqué par le recourant aurait ainsi dû conduire la cour cantonale à tenir compte d'une bonne collaboration ayant notamment permis d'élucider des faits qui, à ce défaut, seraient restés obscurs (cf. arrêt 6B_780/2018 du 9 octobre 2018 consid. 2.1 et les références citées).
En définitive, le recourant ne mentionne aucun élément important, propre à modifier la peine, qui aurait été omis ou pris en considération à tort par la cour cantonale. Le grief doit être rejeté.
4.
Le recourant soutient que la cour cantonale aurait dû renoncer à ordonner son expulsion du territoire suisse sur la base de l'art. 66a al. 2 CP.
4.1. Aux termes de l'art. 66a al. 1 let. o CP, le juge expulse de Suisse l'étranger qui est condamné notamment pour infraction à l'art. 19 al. 2 LStup, quelle que soit la quotité de la peine prononcée à son encontre, pour une durée de cinq à quinze ans. Selon l'art. 66a al. 2 CP, le juge peut exceptionnellement renoncer à une expulsion lorsque celle-ci mettrait l'étranger dans une situation personnelle grave et que les intérêts publics à l'expulsion ne l'emportent pas sur l'intérêt privé de l'étranger à demeurer en Suisse. A cet égard, il tiendra compte de la situation particulière de l'étranger qui est né ou qui a grandi en Suisse.
En l'espèce, le recourant a commis une infraction (infraction à l'art. 19 al. 2 LStup) qui tombe sous le coup de l'art. 66a al. 1 let. o CP. Il remplit donc a priori les conditions d'une expulsion, sous la réserve d'une application de l'art. 66a al. 2 CP, voire également des normes de droit international.
4.2. L'art. 66a al. 2 CP est formulé comme une norme potestative ("Kannvorschrift"), en ce sens que le juge n'a pas l'obligation de renoncer à l'expulsion, mais peut le faire si les conditions fixées par cette disposition sont remplies. Ces conditions sont cumulatives. Afin de pouvoir renoncer à une expulsion prévue par l'art. 66a al. 1 CP, il faut donc, d'une part, que cette mesure mette l'étranger dans une situation personnelle grave et, d'autre part, que les intérêts publics à l'expulsion ne l'emportent pas sur l'intérêt privé de l'étranger à demeurer en Suisse (arrêts 6B_724/2018 du 30 octobre 2018 consid. 2.3.1; 6B_296/2018 du 13 juillet 2018 consid. 3.2; 6B_506/2017 du 14 février 2018 consid. 1.1 et les références citées). Le fait que la clause de rigueur soit une norme potestative ne signifie pas que le juge pénal pourrait librement décider d'appliquer ou non l'exception de l'art. 66a al. 2 CP. Le juge doit faire usage du pouvoir d'appréciation qui lui est conféré par une norme potestative dans le respect des principes constitutionnels. S'il devait refuser de renoncer à l'expulsion alors que les conditions de la clause de rigueur sont remplies, le principe de proportionnalité ancré à l'art. 5 al. 2 Cst. serait violé. Le juge doit ainsi renoncer à l'expulsion lorsque les conditions de l'art. 66a al. 2 CP sont réunies, conformément au principe de proportionnalité (arrêt 6B_724/2018 précité consid. 2.3.1).
4.3. La loi ne définit pas ce qu'il faut entendre par une "situation personnelle grave" (première condition cumulative) ni n'indique les critères à prendre en compte dans la pesée des intérêts (seconde condition cumulative).
En règle générale, il convient d'admettre l'existence d'un cas de rigueur au sens de l'art. 66a al. 2 CP lorsque l'expulsion constituerait, pour l'intéressé, une ingérence d'une certaine importance dans son droit au respect de sa vie privée et familiale garanti par la Constitution fédérale (art. 13 Cst.) et par le droit international, en particulier l'art. 8 CEDH (arrêts 6B_724/2018 précité consid. 2.3.2; 6B_371/2018 du 21 août 2018 consid. 2.5).
Selon la jurisprudence, pour se prévaloir du respect au droit de sa vie privée au sens de l'art. 8 par. 1 CEDH, l'étranger doit établir l'existence de liens sociaux et professionnels spécialement intenses avec la Suisse, notablement supérieurs à ceux qui résultent d'une intégration ordinaire. Le Tribunal fédéral n'adopte pas une approche schématique qui consisterait à présumer, à partir d'une certaine durée de séjour en Suisse, que l'étranger y est enraciné et dispose de ce fait d'un droit de présence dans notre pays. Il procède bien plutôt à une pesée des intérêts en présence, en considérant la durée du séjour en Suisse comme un élément parmi d'autres et en n'accordant qu'un faible poids aux années passées en Suisse dans l'illégalité, en prison ou au bénéfice d'une simple tolérance (cf. ATF 134 II 10 consid. 4.3 p. 24; plus récemment arrêt 6B_706/2018 du 7 août 2018 consid. 2.2 et les références citées).
4.4. En l'espèce, il n'apparaît pas que le recourant pourrait se prévaloir d'un droit au respect de sa vie privée, au sens de l'art. 8 par. 1 CEDH, dès lors qu'il ne présente pas des liens sociaux ou professionnels spécialement intenses avec la Suisse et que son intégration dans ce pays peut même difficilement être qualifiée d'"ordinaire". Par ailleurs, si le recourant affirme entretenir des "relations étroites" avec sa mère et sa soeur en Suisse, celui-ci ne prétend pas qu'il existerait, à leur égard, un rapport de dépendance particulier, par exemple en raison d'une maladie ou d'un handicap (cf. ATF 137 I 154 consid. 3.4.2 p. 159; arrêts 2C_293/2018 du 5 octobre 2018 consid. 1.4; 2C_108/2018 du 28 septembre 2018 consid. 5.3 et les références citées), de sorte qu'il ne saurait en déduire une protection fondée sur l'art. 8 par. 1 CEDH.
Au regard des critères pertinents pour définir un éventuel cas de rigueur (cf. arrêt 6B_724/2018 précité consid. 2.3.2), soit notamment ceux énoncés à l'art. 31 al. 1 de l'ordonnance relative à l'admission, au séjour et à l'exercice d'une activité lucrative (OASA; RS 142.201), il n'apparaît pas davantage que la situation du recourant constituerait un cas de rigueur au sens de l'art. 66a al. 2 CP. En effet, celui-ci a résidé en Suisse entre l'âge de 3 ou 4 ans et celui de 12 ans, puis à nouveau depuis l'âge de 19 ans, soit depuis 1990. Cette durée est certes importante. Pour le reste, l'intégration et la situation financière de l'intéressé sont mauvaises puisque celui-ci émarge à l'aide sociale depuis huit années et ne se prévaut d'aucun projet professionnel particulier. Aucune volonté de prendre part à la vie économique suisse ne peut être décelée chez le recourant. Par ailleurs, le respect de l'ordre juridique suisse ne le préoccupe guère, le recourant ayant déjà fait l'objet de deux condamnations avant la présente cause et ayant de surcroît récidivé après sa condamnation par le tribunal de première instance. Les perspectives de réinsertion sociale du recourant s'avèrent plutôt sombres, puisque celui-ci est toxicodépendant et inactif depuis des années. Ses possibilités de réintégration en France - pays dont il parle la langue, dans lequel il a de la famille et où il a notamment accompli son service militaire - n'apparaissent pas plus minces que celles d'intégration en Suisse.
En définitive, on ne voit pas pourquoi une expulsion du recourant, pour une durée de cinq ans, pourrait placer celui-ci dans une situation personnelle grave. A défaut de la réalisation de cette première condition cumulative, une application de l'art. 66a al. 2 CP ne saurait être envisagée. Le grief doit être rejeté dans la mesure où il est recevable.
5.
Le recourant soutient encore que son expulsion du territoire suisse violerait l'accord sur la libre circulation des personnes (ALCP; RS 0.142.112.681).
Aucun grief relatif à une éventuelle violation de l'ALCP n'a été traité par la cour cantonale, sans que le recourant ne se plaigne, à cet égard, d'un déni de justice formel. Pourtant, dès lors que la cour cantonale a été saisie d'un appel du ministère public réclamant notamment son expulsion du territoire suisse, l'intéressé pouvait, devant l'autorité précédente, s'y opposer en invoquant l'ALCP. Le recourant ne peut ainsi se plaindre d'une éventuelle violation de cet accord pour la première fois devant le Tribunal fédéral (cf. art. 80 al. 1 LTF).
Au demeurant, sans préjuger de la question de savoir si un prévenu pourrait se prévaloir de l'ALCP pour s'opposer à son expulsion du territoire suisse, il convient de relever que le recourant se borne à affirmer qu'il ne présenterait pas un risque de récidive suffisant pour qu'une limitation de ses droits sur la base de l'art. 5 par. 1 annexe I ALCP puisse intervenir. L'intéressé ne fournit en revanche aucune explication concernant un éventuel droit de séjourner en Suisse, en particulier au regard des art. 6 ALCP et 24 annexe I ALCP, voire de l'art. 4 annexe I ALCP - alors qu'il émarge à l'aide sociale depuis de nombreuses années -, de sorte que l'on ne voit pas en vertu de quelle disposition de cet accord celui-ci pourrait prétendre séjourner en Suisse. Le grief du recourant ne répond ainsi nullement, de ce point de vue, aux exigences de motivation découlant de l'art. 42 al. 2 LTF.
6.
Le recourant réclame enfin l'octroi d'une indemnité fondée sur l'art. 429 CPP dans la mesure où il estime devoir être libéré du chef de prévention d'infraction grave à la LStup. Dès lors qu'il n'obtient pas cet acquittement (cf. consid. 2 supra), son argumentation est sans objet.
7.
Au vu de ce qui précède, le recours doit être rejeté dans la mesure où il est recevable. Comme il était dénué de chances de succès, la demande d'assistance judiciaire doit également être rejetée (art. 64 al. 1 LTF). Le recourant, qui succombe, supportera les frais judiciaires, qui seront fixés en tenant compte de sa situation financière, laquelle n'apparaît pas favorable (art. 65 al. 2 et 66 al. 1 LTF).
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
La demande d'assistance judiciaire est rejetée.
3.
Les frais judiciaires, arrêtés à 1'200 fr., sont mis à la charge du recourant.
4.
Le présent arrêt est communiqué aux parties et à la Cour d'appel pénale du Tribunal cantonal du canton de Vaud.
Lausanne, le 15 novembre 2018
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Président : Denys
Le Greffier : Graa